#1
|
|||
|
|||
[C] Helper function to call arbitrary x86 Delphi functions
A project I was working on a while back required me to hook several functions in an application written in Delphi. I was writing my code in C, so I needed to figure out some way to inter-operate with the main application's code. I ended up deciding to write a normal __cdecl function that translated its parameters to Borland Register (aka Delphi "fastcall", different from Microsoft's fastcall, read more here).
This is what I came up with. The helper function takes a pointer to a delphi function, the number of arguments, and then the arguments you want to pass to the delphi function. The result of the invoked function is returned as a void *, but can be easily cast to whatever the return type actually is. Code:
void *Delphi_InvokeMethod(void *pfn, size_t param_count, ...) { va_list ap; void *tmp; void *registers[3]; void *result; va_start(ap, param_count); for ( size_t i = 0; i < param_count; i++ ) { tmp = va_arg(ap, void *); if ( i < _countof(registers) ) registers[i] = tmp; else __asm push tmp } va_end(ap); __asm { mov eax, registers[0] mov edx, registers[type registers * 1] mov ecx, registers[type registers * 2] call pfn mov result, eax } return result; } It might not be perfect, but it worked for what I needed it for. Feel free to suggest ways to improve it or any other kinds of criticism. I hope somebody finds this useful, cheers! |
The Following User Says Thank You to zeffy For This Useful Post: | ||
niculaita (04-13-2018) |
Tags |
delphi |
Thread Tools | |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
IDA Script Function rename for Delphi VCL (x32 - x64) | Coldzer0 | Community Tools | 0 | 05-12-2018 21:51 |
[ASM] Helper function for type inline static messages | dosprog | Source Code | 0 | 04-15-2018 12:14 |
Keygenning With Delphi: Useful Delphi Functions and Tips | chessgod101 | General Discussion | 5 | 01-05-2015 23:02 |
How to call the original function when it's overridden? | BlackWhite | General Discussion | 10 | 08-25-2014 20:45 |