未定义符号:Visual Studio MASM中的rax

问题描述 投票:0回答:1

我正在使用汇编程序来获取进程的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
visual-studio masm
1个回答
0
投票

由于@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
© www.soinside.com 2019 - 2024. All rights reserved.