gdb를 사용하여 프로그램을 검사하고 있습니다. 어셈블리 코드는하고있다 : 나는 %eax
의 내용을 검사 할 때 x86 cmp 연산 코드, 포인터 및 인라인 문 숫자
cmp $0x5, %eax
그러나, 내가 얻을 :
\020\343\377\377\377\177
문자열로 조사 할 때.
\020\343\377\377\377\177
은 조립시 $ 0x5와 비교하면 어떻습니까?
gdb를 사용하여 프로그램을 검사하고 있습니다. 어셈블리 코드는하고있다 : 나는 %eax
의 내용을 검사 할 때 x86 cmp 연산 코드, 포인터 및 인라인 문 숫자
cmp $0x5, %eax
그러나, 내가 얻을 :
\020\343\377\377\377\177
문자열로 조사 할 때.
\020\343\377\377\377\177
은 조립시 $ 0x5와 비교하면 어떻습니까?
cmp
은 eax
의 값을 5
과 비교합니다. eax
이 가리키는 값은 포인터라고 생각하면 상수와 전혀 비교되지 않습니다. eax
의 값에서 감산되고 5
수단 귀하의 경우에, 여러 플래그 (CF는 OF, SF는, ZF는 AF 및 PF는 documentation에 따른) 설정 -
는 비교를 감산함으로써 행해진 다 적절하게. 일반적으로 cmp
명령어 다음에 일종의 조건 명령어 (종종 점프)가 뒤 따르어 비교 결과에 따라 다른 동작을 수행합니다.
eax
을 포인터로 해석하지 않고 eax
으로 알려 주면 더 많은 정보를 제공 할 수 있습니다. p $eax
또는 info registers
을 사용하여 012db의 값을 gdb에 얻을 수 있습니다.
"% eax의 내용"이란 무엇입니까? 문자열로 검사 되었습니까? 레지스터는 C 의미에서 의미있는 문자열을 가질 수 없습니다. –
꽤 넓은 eax가 있습니다. –
x/30s $ eax – darksky