неопределенный символ: rax в Visual Studio MASM - PullRequest
0 голосов
/ 16 января 2020

Я использую ассемблер, чтобы получить адрес для PEB процесса, но я не могу скомпилировать его.

это асм-код x64, но он выдаёт мне ошибку "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_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

1 Ответ

0 голосов
/ 16 января 2020

Я решил свою проблему благодаря @ MichaelPetch

Проблема была вызвана тем фактом, что у меня были директивы .model и .386, которые, по-видимому, как я только что читал сам сейчас, не используются в x64 masm, а также предположим, что gs: none.

Я адаптировал свой код в один файл, и все закончилось так:

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
...