Windowsコマンドを実行するだけの簡単なアセンブリプログラムを書いています。以下に現在の作業コードを添付します。Kernel32.dll の関数である WinExec のベース アドレスをハード コードすると、コードが機能します。Arwin という別のプログラムを使用して、このアドレスを見つけました。ただし、Windows のメモリ保護アドレス空間レイアウトのランダム化 (ASLR) のため、再起動するとこれが中断されます。
私が探しているのは、次回の再起動時に変更されるメモリ アドレスをコードにハード コードすることなく、Windows シェル コマンドを実行する方法を見つけることです。私は似たようなコードを見つけましたが、私が理解している、または目的に合っているものは何もありません。これは 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