я ищу для любой Lib или функции для того чтобы преобразовать строку ассемблера в машинный код, как следующий:Преобразовать сборки в машинный код в C++
char asmString[] = {"mov eax,13H"};
byte[] output; // array of byte
output = asm2mach(asmString); // {0xB8, 0x13, 0x00, 0x00, 0x00}
мотивация вводить машинный код для вызова ассемблера функции в программе. Эта инъекция в основном состоит из трех этапов: 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 # дизассемблер. Это сайт, который я использую для преобразования моих OP-кодов в двоичное представление (байты). В противном случае у меня нет идей. Постскриптум 'asm' - зарезервированное ключевое слово. Кроме того, ваш код asm ('mov eax, 0x13') эквивалентен' {0xB8, 0x13, 0x00, 0x00, 0x00}; ' – Brandon
Имейте в виду, что' asm' может быть ключевым словом. –
Брэндон: Я знал этот сайт, но я хочу, чтобы C++ lib конвертировал их во время работы. Даниилу: Да, вы правы! Я изменил его. – James