我有一个模式,格式如下:
AUTHOR, "TITLE" (PAGES pp.) [CODE STATUS]
Run Code Online (Sandbox Code Playgroud)
例如,我有一个字符串
P.G. Wodehouse, "Heavy Weather" (336 pp.) [PH.409 AVAILABLE FOR LENDING]
Run Code Online (Sandbox Code Playgroud)
我想提取
AUTHOR = P.G. Wodehouse
TITLE = Heavy Weather
PAGES = 336
CODE = PH.409
STATUS = AVAILABLE FOR LENDING
Run Code Online (Sandbox Code Playgroud)
我只知道如何在Python中做到这一点,但是,有没有有效的方法在C++中做同样的事情?
我寻找任何库或函数来将一串汇编代码转换为机器代码,如下所示:
char asmString[] = {"mov eax,13H"};
byte[] output; // array of byte
output = asm2mach(asmString); // {0xB8, 0x13, 0x00, 0x00, 0x00}
Run Code Online (Sandbox Code Playgroud)
动机是在程序中注入机器码来调用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, …Run Code Online (Sandbox Code Playgroud)