将函数及其大小传递给 WriteFile

Passing a function and its size to WriteFile

作为学习练习,我正在编写一个在 run-time 处输出 DLL 的程序。

我写了PE header 并且成功地写了DOS header、NT header、可选部分header 和.text 部分header 使用 WriteFile 到文件,例如:

WriteFile(hFile, &nt_header, sizeof(nt_header), &written, NULL);

我现在想在 .text 部分添加一些代码,但我不知道如何将函数及其大小传递给 WriteFile,例如:

static int test(void)
{
    return 10;
}

WriteFile 的第二个参数的类型为 LPCVOID。我尝试传入 test,但它只写入了 1 个字节。传递指向 test 的指针写入了 4 个字节,如预期的那样。

这可能很明显,但我不明白哪里出错了。

很明显,但答案可能不是您想要的。做不到,至少不能移植。

C 中的函数没有大小。您也不能假设概念 "address of a function" 表示 "address of the first machine instruction in the compiled code for a function".

简而言之,您在 C 中的那个级别无法完成您正在做的事情,您不能直接对函数执行 I/O。