【发布时间】:2014-10-04 06:57:10
【问题描述】:
我寻找任何库或函数来将一串汇编代码转换为机器代码, 像下面这样:
char asmString[] = {"mov eax,13H"};
byte[] output; // array of byte
output = asm2mach(asmString); // {0xB8, 0x13, 0x00, 0x00, 0x00}
动机是在程序中注入机器代码来调用asm函数。本次注入主要有3个步骤:VirtualAllocEx、WriteProcessMemory和CreateRemoteThread。代码如下:
bool injectAsm(const char* exeName,const byte* code, int size)
{
LPVOID allocAddr = NULL;
HANDLE ThreadProcess = NULL;
HANDLE hProcess = OpenProcessEasy(exeName);
allocAddr = VirtualAllocEx(hProcess, NULL, size, MEM_COMMIT, PAGE_READWRITE);
if(allocAddr){
if(WriteProcessMemory(hProcess, allocAddr, code, size, NULL)) {
ThreadProcess = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)allocAddr, NULL, 0, NULL);
WaitForSingleObject(ThreadProcess, INFINITE);
VirtualFreeEx(hProcess,allocAddr, 0, MEM_RELEASE);
CloseHandle(ThreadProcess);
return true;
}
}
if(allocAddr){
VirtualFreeEx(hProcess, allocAddr, 0, MEM_RELEASE);
}
return false;
}
int main()
{
byte code[] = {0xB8, 0x10, 0xED, 0x4A, 0x00, 0xFF, 0xD0, 0xC3, 0x90};
injectAsm("game.exe",code,sizeof(code));
system("pause");
return 0;
}
【问题讨论】:
-
我没有功能但是..如果您使用套接字向该站点发送请求,我猜它可以工作:defuse.ca/online-x86-assembler.htm#disassembly 那是我用来将我的 OP 代码转换为的站点二进制表示(字节)。否则,我没有想法。附:
asm是保留关键字。此外,您的 asm (mov eax, 0x13) 代码等同于{0xB8, 0x13, 0x00, 0x00, 0x00}; -
请记住,
asm可能是关键字。 -
致布兰登:我知道这个网站,但我想要一些 c++ 库在运行时转换它们。对丹尼尔:是的,你是对的!我已经改了。
-
您确实应该编辑您的问题以提供更多背景和动机。你用的是什么编译器,什么操作系统?你在编写什么样的软件?