我注意到(至少在Win32上)在可执行文件中,代码段(.text)具有"读取"访问位设置,以及"执行"访问位.是否有任何真正合理的理由让代码自己阅读而不是自己执行?我认为这是其他部分的用途(例如.rdata).
(具体来说,我在谈论IMAGE_SCN_MEM_READ.)
我需要验证给定的二进制文件是否是PE文件(例如,如果我将JS/HTML或.class文件重命名为.exe或.dll),它仍然不是PE文件.解析PE文件会给我关于这个问题的信息; 什么字段表示给定的二进制文件是否是有效的PE文件?
我检查了FileHeader的"e_magic"字段,它总是在错误的PE文件(即js/html/java/class文件重命名为.dll/Exe)的情况下填充,并且没有说明有关的有效性. PE.
从磁盘位置读取 PE 文件时,我需要将 RVA(取自 pdb 文件的相对虚拟地址)映射到 PE 文件(EXE)偏移量。为此,我需要将 RVA 转换为文件偏移量,以便我可以从该位置读出 GUIDS(CLSID,IID)。
问候乌斯曼
在C++中使用PE文件中包含的资源(例如二进制资源)时.我们要先打个电话
1)FindResource然后
2)LoadResource
访问资源.
关于函数名称"LoadResource"的准确性我想知道"Windows Loader"是否确实在加载其他部分(如代码或数据部分)时加载了内存中应用程序的所有资源,或者只在我们需要它们时才加载延迟?
如果是这样,我们可以在使用它们之后卸载这些资源以释放分配的内存吗?
在反汇编/转储exe时,我在.idata导入部分中得到三个表:
我理解IAT和INT是什么,但更准确的是什么?
有人可以提供解释,因为各种PE教程令人困惑.我并不完全理解他们描述的这些官方结构名称在这个特定数据上的位置.
这里的提示/答案会有所帮助
示例PE文件部分
SECTION .idata align=4 noexecute ; section number 3, data
Import_table: ; dword
db 50H, 30H, 00H, 00H, 00H, 00H, 00H, 00H ; 00403000 _ P0......
db 00H, 00H, 00H, 00H, 0ACH, 30H, 00H, 00H ; 00403008 _ .....0..
db 68H, 30H, 00H, 00H, 58H, 30H, 00H, 00H ; 00403010 _ h0..X0..
db 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ; 00403018 _ ........
db 0C0H, 30H, 00H, 00H, 70H, 30H, 00H, …Run Code Online (Sandbox Code Playgroud) winapi reverse-engineering coff disassembly portable-executable
我正在修改一个旧的放弃软件游戏,以获得无限生命.
具有该指令的地址dec ecx与其在.exe调试中的位置不同.
我记得我的一位老朋友告诉我,有一个公式可以通过.exe中的指令获得"真实"地址.作弊引擎给了我内存地址.我记得在数学公式中,我需要得到模块,在OllyDbg我得到它.但我不记得这个公式.有人知道那个数学公式怎么样?这个公式非常简单!还有另一种方法可以让文件位置永久修改.exe吗?
assembly reverse-engineering memory-address portable-executable cheat-engine
我想在 OllyDbg 中分析一个文件,然而,这个文件中的“入口点地址”是0x0000. 所以它将运行 MZ 签名作为 ASM 代码的开始部分。
大多数调试器也无法直接调试它。
如何找到修改标题的原始入口点?
一个真棒文章约PE格式规定如下:
名称。每个节标题都有一个名称字段,长度最多八个字符,对于第一个字符必须为一个句点。
但是我知道一些违反此规则的示例,从.gnu_debuglink二进制文件内的部分开始,这些示例以DWARF格式分离了调试符号。另外侏儒的.debug_arranges,.debug_info以及其他违反本。(为了进行比较,PDB的“分离”部分名称仅为.debug。)
因此,我想知道本文是否只是过时/不完整,或者这是Windows特定的准则,还是对节名称长度没有任何限制?
如果有人给我指向任何有关PE / COFF二进制的书(ELF也会很棒),并且甚至比在线文章更全面,我也会很高兴。或关于系统编程的一般知识-有关此主题的信息非常稀缺或已过20年了。:)
如何从.rdataPE 部分删除 IMAGE_DEBUG_DIRECTORY 数据?
我正在使用 MS Visual Studio 2015。我确实检查了项目属性的几乎所有编译选项。但是 IMAGE_DEBUG_DIRECTORY 数据仍然存在于我的输出可执行文件中...
我在 MSDN 上阅读了有关 PE 格式的文档,其中指定了:
加载到内存时图像第一个字节的首选地址;必须是 64 K 的倍数。 DLL 的默认值为 0x10000000。Windows CE EXE 的默认值为 0x00010000。Windows NT、Windows 2000、Windows XP、Windows 95、Windows 98 和 Windows Me 的默认值为 0x00400000
我不太明白这一点。什么是“首选地址”?在创建新进程/加载可执行文件时,windows 是如何使用这个字段的?
c++ ×3
assembly ×2
visual-c++ ×2
winapi ×2
windows ×2
.net ×1
byte ×1
cffile ×1
cheat-engine ×1
coff ×1
debugging ×1
disassembly ×1
executable ×1
header ×1
memory ×1
ollydbg ×1
portability ×1
process ×1
sections ×1