我正在编写一个简单的汇编程序,它将只执行 Windows 命令。我将在下面附上当前的工作代码。如果我硬编码 WinExec 的基地址(来自 Kernel32.dll 的函数),该代码就可以工作,我使用另一个名为 Arwin 的程序来定位该地址。但是,由于 Windows 内存保护地址空间布局随机化 (ASLR),重新启动会破坏这一点
我要做的是找到一种方法来执行 Windows shell 命令,而不必将内存地址硬编码到我的代码中,该地址将在下次重新启动时更改。我发现了类似的代码,但没有任何我理解或符合目的的代码。我知道这可以用 C 编写,但我专门使用汇编程序来保持大小尽可能小。
感谢您的建议/帮助。
;Just runs a simple netstat command.
;compile with nasm -f bin cmd.asm -o cmd.bin
[BITS 32]
global _start
section .text
_start:
jmp short command
function: ;Label
;WinExec("Command to execute",NULL)
pop ecx
xor eax,eax
push eax
push ecx
mov eax,0x77e6e5fd ;Address found by arwin for WinExec in Kernel32.dll
call eax
xor eax,eax
push eax
mov eax,0x7c81cafa
call eax
command: ;Label
call function
db "cmd.exe /c netstat /naob"
db 0x00