【发布时间】:2021-11-24 10:34:44
【问题描述】:
我在书中有一个示例,其中包含主函数 prolog 的 GDB 输出:
0х08048357 <main+0> : push еbр
0х08048358 <main+l> : mov ebp, esp
0х0804835а
但在我的系统(Manjaro linux)中,相同的代码和相同的 GDB 为我提供了类似的东西:
0x000000000000118e <+0>: push rbp
0x000000000000118f <+1>: mov rbp,rsp
0x0000000000001192 <+4>: mov ecx,0x4
0x0000000000001197 <+9>: mov edx,0x3
0x000000000000119c <+14>: mov esi,0x2
0x00000000000011a1 <+19>: mov edi,0x1
我想知道“R”和“E”起始寄存器有什么区别。需要“新手”解释。
【问题讨论】:
-
r = 64 位,e = 32 位 registers
-
@tttony - 注意 |mov ecx,0x4|将清除 rcx 的高 32 位。
-
如果您想以更符合旧书的方式进行编译,请使用
gcc -m32 -fno-pie -no-pie -fno-stack-protector。但是不要期望与不同的编译器版本完全匹配。 Why I'm getting different result from tutorial -
gcc Assembly code output different than expected 是同样的基本问题,但没有任何详细答案
标签: assembly x86-64 cpu-registers