我试图了解如何在程序集中使用指针。通过阅读一些有关内部的教程,我认为已经了解了一些概念。但是当我去尝试它时,它确实有效。下面是一些将 C 转换为 ASM 的尝试。
C
const char *s = "foo";
unsigned z = *(unsigned*)s;
if(!(z & 0xFF))
do_something();
if(!(z & 0xFFFF))
do_b_something();
(这里不是完整的代码,但它是一个字检查,因此,还有两个分别检查 0xFF0000,0xF000000 的 stmts。
ASM:
mov ebp,str
mov eax,ebp
mov eax,[eax]
and eax,0xFF
cmp eax,0
je etc
mov eax,[eax]
and eax,0xFFFF
cmp eax,0
je etc
它返回一个段错误。
并尝试:
mov eax,dword ptr [eax]
这是由 gcc 编译器生成的,您可以在其他一些程序集代码中看到它,返回
invalid symbol
在 FASM 汇编器上。FASM 并不真正支持它,还是我遗漏了什么?