我正在写一个小的PE读取器,所以我在我的测试应用程序旁边运行dumpbin以确认正确读取了值.到目前为止它所做的一切,除了导出表.
我正在测试的文件是一个DLL.我的应用程序以字节数组的形式读取文件,并将其传递给我的PE读取器类.这些值与dumpbin输出的值一致,包括RVA和导出数据目录的大小.
E000 [ 362] RVA [size] of Export Directory
Run Code Online (Sandbox Code Playgroud)
问题是,字节数组的大小只有42,496.你可以想象,当我的PE阅读器尝试在E000(57,344)阅读时,我得到了一个IndexOutOfRangeException.但是,dumpbin没有这样的问题,并且读取导出目录就好了.是的,整个文件确实被读入字节数组.
这怎么可能?
我创建了一个静态库和一个EXE文件(使用静态库),但是当我在IDA pro中打开EXE时,导出也列在EXE中.
我知道它们应该在.lib本身中导出,但为什么它们也会在EXE中显示为导出呢?
编辑:这是导出/导入(它们在单独的头文件中)
这是出口:
#define NC_LIBEXPORT(a) extern "C" __declspec(dllexport) a __cdecl
NC_LIBEXPORT(VOID) rol8(unsigned char* a, unsigned char b);
Run Code Online (Sandbox Code Playgroud)
和进口:
extern "C" VOID rol8(unsigned char* a, unsigned char b);
Run Code Online (Sandbox Code Playgroud)