- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试为Windows编写一个exe包装器。到目前为止,我已经掌握了一些基础知识。不过,我正在阅读的部分是“BOUND IMPORT Directory Table”(或“.idata”部分?),基本上是PE文件的该部分,其中包含加载程序需要导入的DLL列表。
我想知道哪种最好的方法是:
[A]找出IAT的位置(因为针对几个不同的.exe运行PEView似乎表明此列表可以包含在多个不同的位置),然后阅读该列表
或者
[B]只要找到一种方法即可直接读取exe需要导入的DLL列表。
有没有办法做到这一点?人们对IAT应该在哪里以及如何阅读它有什么进一步的建议吗?
最佳答案
是的,您可以通过遍历可执行文件的头来找到IAT。在winnt.h
中查找标题声明。
有关如何在标题中查找信息的详细信息,请参见MSDN杂志上的Matt Pietrek的系列文章“深入了解Win32便携式可执行文件格式”,第I和II部分。
您还可以从here获得实际的Microsoft PE规范。
TL; DR:基本上,查找顺序如下:
IMAGE_DOS_HEADER
结构。 e_lfanew
字段进入IMAGE_NT_HEADERS
结构。 OptionalHeader
进入IMAGE_OPTIONAL_HEADER
结构(尽管它的名字,它不再是可选的)。 DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
到IMAGE_IMPORT_DESCRIPTOR
结构的数组。每个导入的DLL都有一个条目。该数组中的最后一个条目将被清零。 Name
字段是一个RVA,它指向DLL的名称。 FirstThunk
字段是指向该DLL的IAT的RVA,该IAT是IMAGE_THUNK_DATA
结构的数组。 关于c - PE格式-IAT问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7673754/
如果我从 C++ 代码调用 Win32 API 函数,如下例所示: fSuccess = WriteFile( hPipe, // pipe handle l
我有一个 .dll 注入(inject)到另一个进程的地址空间。目标应用程序使用 QT 库。我可以插入一个弯路,这样每次QT函数?rowsInserted@QListView@@MAEXABVQMod
我正在尝试将函数挂接到 cmd.exe 进程dll注入(inject)很好问题是我无法让cmd.exe调用我的函数当我试图在命令提示符下输入单词“dir”时,它向我展示了将名字更改为“dan”的相同结
到处都有这样的解释,即导入函数的进程的 IAT 中填充了从它想要的 dll 中导出的函数的地址。 但是这些指向导入函数的指针在什么地址空间?如果它是一个虚拟地址,那将没有意义,因为导入进程有自己的虚拟
我正在处理一些 dll 注入(inject)/函数 Hook 。通过比较 IAT 中的函数名称,我可以按名称挂接导入地址表的函数。 (获取 IMAGE_THUNK_DATA 并读取值) 但是当我注入(
当我在我的进程中加载 dll 时,该 dll 如何解析它导入的函数地址?我尝试在 GetProcAddress 和 LdrGetProcedureAddress 上设置断点,但它并没有在那里中断。
我一直在尝试在进程加载和运行后解析/显示进程的导入地址表 (IAT) 中的信息。我理解程序中的 API 调用会跳转到 IAT 中的相关点,然后 IAT 会跳转到加载的 DLL 中的实际函数。 通过读取
我编写了这段代码,通过更改 IAT 和 EAT 中的地址来 Hook API 函数:http://pastebin.com/7d9N1J2c 当我想 Hook “recv”或“connect”时,这很
我遇到的问题如下: badboy 代码行: HMODULE handle = (HMODULE)pLoadLibraryA((LPCSTR)(codeBase + importDesc->Name))
我有一个应用程序 X,它使用 DLL 文件 A 中的函数并在其 IAT 中引用它。我想以编程方式(不是手动修补)强制 X 加载具有模拟功能的替换 DLL B,换句话说,更改 IAT,以便加载我的文件
我正在尝试在 Internet Explorer 8(未在保护模式下运行)、Windows 7 x64 上使用 IAT Hooking。该代码也不适用于 WinXP 上的 IE7。我已经获得了指向存储
我需要根据 dataframe.iat[行,列] 读取和更新数据单元格值。 我的数据约为 338 000 行,因此我需要使用更快的方法 (iat) 来实现此目标。 我必须按名称使用列,因为它会通过另一
我试图找出何时在 pandas DataFrame 中使用不同的选择方法。特别是,我正在寻找访问标量值。我经常听到普遍推荐使用 ix。但是在pandas documentation建议使用 at 和
pandas为我们提供了多种切片方法,而要是不太了解这些方法,就会经常容易混淆。下面举例对这些切片方法进行说明。 数据介绍 先随机生成一组数据: ?
我试图从打印可执行文件的 dll 名称开始打印 iat,但似乎出现了与我如何遍历 pe header 有关的错误。有人可以指出我的代码哪里出了问题吗?我可以正确打印部分信息,并且它识别出 iat 从
当创建具有相同列名的两列的 DataFrame 时,使用 .iat[i,j] 将导致 TypeError。不过,切换到 .iloc[i,j] 可以解决问题。在这种情况下,为什么 iat 的行为与 il
我可以 Hook 任何其他函数,但不能 Hook ExitProcess。 下面是演示这个的代码: #include #include #include #include void __std
我正在编写代码来执行 Windows 中 IAT 的 Hook 。我能够在 IAT (Kernel32!GetCurrentProcessId) 中更改目标函数的地址,但是稍后在程序中调用 Hook
根据文档,https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback ,j
我最近注意到我使用 .iloc 遍历 DataFrame 行的函数非常慢。我发现有一个更快的方法叫做 .iat,据说它等同于 .iloc。我试过了,运行时间减少了大约 75%。 但我有点犹豫:为什么会
我是一名优秀的程序员,十分优秀!