rdbo / libmem

Advanced Game Hacking Library for C, Modern C++, Rust and Python (Windows/Linux/FreeBSD) (Process/Memory Hacking) (Hooking/Detouring) (Cross Platform) (x86/x64) (DLL/SO Injection) (Internal/External) (Assembler/Disassembler)
GNU Affero General Public License v3.0
830 stars 101 forks source link

64-bit targets where the jump distance bigger than 2GB #256

Open Jai-wei opened 2 months ago

Jai-wei commented 2 months ago

Questionlibmem.alloc_memory_ex When allocating virtual memory in a 64-bit program, the Windows system will automatically allocate it to a farther place, causing the jmp instruction to be too long. Can this be optimized? Programming language: Python

Problem description

  1. Assume the current instruction is:
    
    notepad++.exe+3A - 00 00                 - add [rax],al
    notepad++.exe+3C - 28 01                 - sub [rcx],al
    notepad++.exe+3E - 00 00                 - add [rax],al
    notepad++.exe+40 - 0E                    - push cs
    notepad++.exe+41 - 1F                    - pop ds
    notepad++.exe+42 - BA 0E00B409           - mov edx,09B4000E
    notepad++.exe+47 - CD 21                 - int 21
    notepad++.exe+49 - B8 014CCD21           - mov eax,21CD4C01
    notepad++.exe+4E - 54                    - push rsp
2. The address obtained by using the `alloc_memory_ex` function is: `0x1d0f84c0000`
```basic
000001D0F84D0000 | 0000      | ADD BYTE PTR DS:[RAX],AL 
  1. Use hook_code_ex function to hook,The assembly instructions become:
    notepad++.exe+3A - FF25 00000000 00004DF8D0010000 - jmp 1D0F84D0000
    notepad++.exe+48 - 90                    - nop 
    notepad++.exe+49 - B8 014CCD21           - mov eax,21CD4C01
    notepad++.exe+4E - 54                    - push rsp
  2. 👆The problem is that the jmp command uses 14 bytes to complete: FF25 00000000 00004DF8D0010000

Extended description

//////////////////// After hook notepad++.exe+8D - E9 6EFFFEFF - jmp 7FF7B8D90000 notepad++.exe+92 - 90 - nop



**So is there any way, when applying for memory, to apply for memory near the specified memory, just like CE's alloc function?**

Thank you