作为一项学习练习,我正在编写一个在运行时输出DLL的程序。
我已经编写了PE标头并使用.text
成功地将DOS标头,NT标头,可选节标头和WriteFile
节标头写入文件,例如:
WriteFile(hFile,& nt_header,sizeof(nt_header),& written,NULL);
我现在想在.text
部分添加一些代码,但我不知道如何将函数及其大小传递给WriteFile
,例如:
static int test(void)
{
return 10;
}
WriteFile
的第二个参数的类型为LPCVOID
。我尝试传入test
,但只写了1个字节。传递指向test
的指针按预期写入了4个字节。
这可能很明显,但我不明白我哪里出错了。
答案 0 :(得分:4)
很明显,答案可能不是你想要的。这是不可能做到的,至少不是便携式的。
C中的函数没有大小。您也不能假设“函数的地址”这个概念意味着“函数编译代码中第一台机器指令的地址”。
简而言之,你在C级的那个级别是不可能的,你不能直接对函数进行I / O.