Windows C++ / Dynamically Computed Target Address
Author | Unprotect |
Platform | Windows |
Language | C++ |
Technique | Dynamically Computed Target Address |
Description:
This code uses the malloc function to dynamically allocate memory for a target address that will be used as the target of a call instruction. It then uses the main function's address as the base for the target address, and adds an offset of 0x00000004 to it to compute the final target address. This computed target address is then stored in the dynamically allocated memory and is used as the target of the call instruction.
Code
#include <stdio.h>
#include <stdlib.h>
int main() {
// Dynamically compute the target address of the "call" instruction
char *target = (char *)malloc(8);
*(unsigned long long *)target = (unsigned long long)main + 0x00000004;
// Use the dynamically computed target address in a "call" instruction
__asm__("mov eax, [%0]\n"
"call eax\n"
:: "r" (target) : "eax");
return 0;
}
Created
December 6, 2022
Last Revised
April 22, 2024