我正在为 32 位和 64 位 Linux 操作系统创建驱动程序。要求之一是所有代码都必须是自包含的,没有调用。在 64 位上我没有问题,但在 32 位 GCC 上似乎将调用指令添加到下一个字节。经过一番搜索,我找到了这个链接:
http://forum.soft32.com/linux/Strange-problem-disassemble-shared-lib-ftopict439936.html
有没有办法在 32 位 Linux 上禁用它?
示例:32 位反汇编:
<testfunc>:
0: push %ebp
1: mov %esp, %ebp
3: call 4 <test_func+0x4>
<...some operation on ebx as mentioned in the link above>
64 位拆卸:
<testfunc>:
0: push %rbp
1: mov %rsp, %rbp
3: <...no call here>
“testfunc”中根本没有调用。即便如此,为什么 32 位编译器还要添加这些“调用”指令?任何帮助表示赞赏。