Visual studio 未定义的符号:VisualStudio MASM中的rax
我正在使用assembly获取进程PEB的地址,但我无法编译它 这是x64 asm代码,但它给出了错误“undefined symbol:rax”,这毫无意义。不管我是用x86还是x64编译它都无关紧要。我有一个单独的.asm文件,它具有相同的功能,但有x86寄存器等Visual studio 未定义的符号:VisualStudio MASM中的rax,visual-studio,masm,Visual Studio,Masm,我正在使用assembly获取进程PEB的地址,但我无法编译它 这是x64 asm代码,但它给出了错误“undefined symbol: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_i
.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中没有使用,还有假设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
对于64位代码删除
.386
和.model flat,C
这并不能解决我的错误,它只给了我3个不同的必须是段内块错误。我应该用什么来代替?为什么我不应该使用它们?你确定你正在使用ML64.EXE进行组装吗?听起来就像是在组装32位的。或者,如果您使用的是Visual Studio C/C++项目,是否确实将其设置为64位(x86-64)而不是32位x86?我检查了保存x64代码的文件,这是命令行:ml64.exe/C/nologo/Zi/Fo“x64\Release\modules\u internal_x64.obj”/Fl”“/W3/errorReport:prompt/Tait现在可以工作了,非常感谢mike!如果你愿意,你可以提交你的答案,我会接受的