2012-10-06 3 views
1

전체 소스 코드가 없지만 심볼이있는 객체 파일이 있습니다. 읽기 라인이 있습니다 :GDB의 어셈블리 어셈블리 변수

=> 0x080489cd <+169>: call 0x8049275 <read_line> 
    0x080489d2 <+174>: mov %eax,(%esp) 
    0x080489d5 <+177>: call 0x8048d59 <phase_1> 

in the function: 
8048d59: 55      push %ebp 
8048d5a: 89 e5     mov %esp,%ebp 
8048d5c: 83 ec 08    sub $0x8,%esp 

나는 첫 줄에 b를 넣었고 확실하게 함수 이름에 하나를 추가했습니다. 입력 한 후 "1"p *(char**)$esp을 시도하고 내가 얻을 :

내가 기대 한 것이 아니다
0x80489da "\350\355\006" 

. 나는 "1"을 볼 것으로 예상되었다. 나는 또한 시도 : 다음 당신이보고있는 것은 수익입니다 :

gdb x $esp 
0xbffff0cc: 0x080489da 

gdb x *0xbffff0cc 

0x80489da <main+182>: 0x0006ede8 
+0

당신은 기호 오브젝트 파일을 말한다. 'gcc -g'로 컴파일되었는지, 즉 디버깅 정보로 알 수 있습니까? 이 경우 소스 코드를 100 % 빠르게 복구 할 수 있습니다. – QuasarDonkey

답변

4

당신이 함수의 같은 처음에 침입하는 경우 ("나는 첫 번째 줄에 AB를 넣어"나는 당신이 무엇을 의미하는 것 가정) 주소. 실제로 phase_1을 (를) 호출하여 반송 주소가 표시되는 것 같습니다.

당신이 찾고있는 것은 첫 번째 매개 변수의 시도 인 경우 :

p *(char**)($esp+4); 
+0

나는 그것을 phase_1에서 만들지 않았다. 두 번째 부분은 phase_1 섹션에 있습니다. 개별 교육의 결과를 얻으려면 어떻게해야합니까? – user994165

+0

"개별 교육의 결과"란 무엇을 의미하는지 모르겠습니다. 지침에는 "결과"가 없습니다. (메모리 또는 레지스터)에 기록 된 위치를 볼 수 있습니다. 그러나 원하는 모든 것이 read_line의 결과라면, 내가 제공 한 진술을 시도해 보시기 바랍니다. 그것이 작동하지 않는다면 그것이 말하는 것을 말해주십시오. – CrazyCasta