그래서이 쉬운 프로그램에서는 012db에 액세스하려고합니다.(Assembly newbie) GDB에서 x86-64의 32 비트 레지스터에 액세스 할 수 없습니다
C 코드 : 여기
int main(){
int a = 1;
int b = 3;
int c = a + b;
return 1;
}
내 gdb를 시도하다 :
그래서
(gdb) disas
Dump of assembler code for function main:
0x000000000040049c <+0>: push %rbp
0x000000000040049d <+1>: mov %rsp,%rbp
0x00000000004004a0 <+4>: movl $0x1,-0x4(%rbp)
0x00000000004004a7 <+11>: movl $0x3,-0x8(%rbp)
0x00000000004004ae <+18>: mov -0x8(%rbp),%eax
0x00000000004004b1 <+21>: mov -0x4(%rbp),%edx
=> 0x00000000004004b4 <+24>: add %edx,%eax
0x00000000004004b6 <+26>: mov %eax,-0xc(%rbp)
0x00000000004004b9 <+29>: pop %rbp
0x00000000004004ba <+30>: retq
End of assembler dump.
(gdb) x $rbp
0x7fffffffe620: 0x00000000
(gdb) x $rbp-4
0x7fffffffe61c: 0x00000001
(gdb) x $rbp-8
0x7fffffffe618: 0x00000003
(gdb) x $eax
0x3: Cannot access memory at address 0x3
당신은 내가 rbp
에 액세스 할 수 x $rbp
를 사용하여 아무 문제가 없지만, 내가 eax
에 액세스 할 수 없습니다 해요 볼 수 있습니다 .
64 비트 시스템에서 gdb의 32 비트 레지스터에 액세스하려면 몇 가지 설정이 필요합니까?
대신에'p $ rbp'와'p $ eax'를 시도해보십시오. (그리고 "help x"와 "help p"를 사용하면이 두 명령의 차이점을 알 수 있습니다) – Nemo