programing

지정된 주소 gdb에서 찾은 표시 값

anycallme 2023. 10. 28. 08:10

지정된 주소 gdb에서 찾은 표시 값

저는 gdb에서 바이너리 파일 디버깅을 하고 있습니다.그것은 gcc가 인텔 IA-32로 컴파일한 C 코드였습니다.이 출력물을 검색했습니다.objdump. 저는 여기서 마지막 줄에 가장 관심이 있습니다.

08048d9e <func_1>
8048d9e:    55                      push   %ebp
8048d9f:    89 e5                   mov    %esp,%ebp
8048da1:    83 ec 18                sub    $0x18,%esp
8048da4:    c7 44 24 04 88 99 04    movl   $0x8049988,0x4(%esp)
8048dab:    08 
8048dac:    8b 45 08                mov    0x8(%ebp),%eax
8048daf:    89 04 24                mov    %eax,(%esp)
8048db2:    e8 54 01 00 00          call   8048f0b <strings_not_equal>

이 마지막 줄은 표시된 주소에서 찾을 수 있는 값을 비교할 것으로 생각합니다.8048f0b. 시도:

(gdb) x 0x8048f0b

수신:

0x8048f0b <strings_not_equal>:  0x57e58955

제가 조립품을 잘못 해석하고 있는 건가요?이것이 gdb의 주소 값을 읽는 올바른 방법입니까?좀 더 아스키 친화적인 헥스 값을 찾을 거라 기대하고 있었어요비교 대상이 되는 저장 문자열 값을 찾고 싶습니다.

그리고 이런 종류의 디버깅에 사용하기 좋아하는 gui 도구가 있습니까?저는 ddd를 시도해볼까 생각해왔습니다.디버그하는 더 쉬운 방법을 찾고 싶습니다.

메모리 주소에서 값을 올바르게 읽고 있습니다.0x8048f0b, 그러나 선call 8048f0b <strings_not_equal>이 주소가 함수의 시작임을 나타냅니다(호칭).strings_not_equal()ASCII일 것이라고는 기대할 수 없습니다. 더 많은 기계 코드일 것이라고 기대할 수 있습니다.

함수 인수를 찾고 있는 경우strings_not_equal(), 그것들은 스택으로 밀려나고 있습니다.첫 번째 인수를 복사하는 중입니다.0x8(%ebp), 이것이 첫번째 주장입니다.func1(). 두번째 주장은$0x8049988, 아마 끈의 주소일 겁니다

만약 당신이 주소의 내용을 문자열로 인쇄하고 싶다면, 당신은 다음과 같이 할 수 있습니다.x/s:

x/s 0x8049988

언급URL : https://stackoverflow.com/questions/14493707/display-value-found-at-given-address-gdb