将函数及其大小传递给 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。
作为学习练习,我正在编写一个在 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。