我在 Windows 7 中使用 nasm 制作了一个简单的 MessageBox,我对生成的文件的大小有点不满意:2.51 kb。
extern MessageBoxA
extern ExitProcess
import MessageBoxA user32.dll
import ExitProcess kernel32.dll
section .text use32
..start:
push 0
push sCapt
push sText
push 0
call [MessageBoxA]
push 0
call [ExitProcess]
section .data
sCapt db 'test', 0
sText db 'test2', 0
Run Code Online (Sandbox Code Playgroud)
所以我在 OllyDbg 中打开了可执行文件,似乎它生成了很多不必要的东西。

因此,为了了解更多信息,我想直接以十六进制形式制作该程序,以保持尽可能小的大小!我进行了搜索,但没有找到任何教导如何手动创建 PE 可执行文件的内容。
如果有人能给我链接或解释如何做,我将不胜感激!
为什么在此行上出现此错误?
*(BYTE*)(dwAddr + 5) = 0xC3;
Run Code Online (Sandbox Code Playgroud)
Main.cpp(34):错误C2297:'*':非法,右操作数的类型为'BYTE*'
void PushRetHook(DWORD dwAddr, LPVOID dwNew, int size)
{
DWORD OldProt;
VirtualProtect((void*)dwAddr, size, PAGE_EXECUTE_READWRITE, &OldProt);
memset((void*)(dwAddr), 0x90, size);
*(BYTE*)dwAddr = 0x68;
*(DWORD*)(dwAddr + 1) = (DWORD)dwNew
*(BYTE*)(dwAddr + 5) = 0xC3;
VirtualProtect((void*)(dwAddr), size, OldProt, &OldProt);
}
Run Code Online (Sandbox Code Playgroud)