我正在使用汇编程序来获取进程的PEB的地址,但我无法对其进行编译。
这是x64 asm代码,但它给我的错误“未定义符号:rax”没有任何意义。即使我在x86或x64中编译它也没有关系。我有一个单独的.asm文件,该文件具有相同的功能,但带有x86寄存器等。
.386
.model flat, C
.code
get_peb_internal_x64 proc
assume gs:nothing
mov rax, gs:[60h]
ret
get_peb_internal_x64 endp
end
-现在始终可以编译的x86版本
.386
.model flat, C
.code
get_peb_internal_x86 proc
assume fs:nothing
mov eax, fs:[30h]
ret
get_peb_internal_x86 endp
end
由于@MichaelPetch,我已经解决了我的问题
问题是由于我拥有.model和.386指令,这些指令显然已经被我读过,在x64 masm中使用了arent,并且还假设了gs:nothing。
我将我的代码改编成一个文件,结果以这种方式结束:
ifdef rax
else
.386
.model flat, C
endif
.code
ifdef rax
get_peb_internal_x64 proc
mov rax, gs:[60h]
ret
get_peb_internal_x64 endp
else
get_peb_internal_x86 proc
assume fs:nothing
mov eax, fs:[30h]
ret
get_peb_internal_x86 endp
endif
end