我尋求任何lib或起作用以彙編代碼的字符串轉換成機器代碼, 如下所示:轉換組件在C機器碼++
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;
}
我沒有一個函數,但..如果你使用套接字發送請求到這個網站,它可以工作我猜:https://defuse.ca/online-x86-assembler。htm#disassembly這是我用來將我的OP代碼轉換爲二進制表示(字節)的站點。否則,我沒有想法。附: 'asm'是一個保留關鍵字。另外,你的asm('mov eax,0x13')代碼相當於'{0xB8,0x13,0x00,0x00,0x00};' – Brandon 2014-10-04 07:00:09
請記住'asm'可能是一個關鍵字。 – 2014-10-04 07:04:22
布蘭登:我知道這個網站,但我想要一些C++ lib在運行時轉換它們。對丹尼爾:是的,你是對的!我改變了它。 – James 2014-10-04 07:10:00