小编Jam*_*mes的帖子

如何有效地提取C++中的字符串模式?

我有一个模式,格式如下:

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++中做同样的事情?

c++

3
推荐指数
1
解决办法
2146
查看次数

在 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)

c++ assembly

2
推荐指数
1
解决办法
3941
查看次数

标签 统计

c++ ×2

assembly ×1