标签: portable-executable

/TSAWARE 链接器标志对 PE 可执行文件有什么作用?

将 /TSAWARE 链接器标志添加到我的一个项目 (Visual Studio 6) 后,我惊讶地发现 PE 文件 (.idata) 中有一个新部分。如果我不设置标志,导入将合并到 .rdata 中。

为了说明“问题”,我们从一个简单的控制台程序开始:

#include <stdio.h>
int main() 
{
    printf("hello world\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并编译: cl /Og /O1 /GF /WX /c main.c

然后链接

  • link /MACHINE:IX86 /SUBSYSTEM:CONSOLE /RELEASE /OUT:a.exe main.obj
  • link /MACHINE:IX86 /SUBSYSTEM:CONSOLE /RELEASE /OUT:b.exe /TSAWARE main.obj

让我们比较 dumpbin 输出:

Dump of file a.exe

File Type: EXECUTABLE IMAGE

  Summary

        4000 .data
        1000 .rdata
        5000 .text

Dump of file b.exe

File Type: EXECUTABLE IMAGE

  Summary

        4000 .data
        1000 .idata
        1000 .rdata
        5000 …
Run Code Online (Sandbox Code Playgroud)

windows linker visual-c++-6 portable-executable visual-c++

4
推荐指数
1
解决办法
4174
查看次数

在可执行文件的资源中,如何找到默认图标?

我需要以编程方式找到Windows可执行文件的默认图标(PE文件= dll,exe,com ..).我知道如何遍历资源并确定什么是图标,什么是光标等,但据我所知,没有任何图标以任何方式标记为默认图标.那么,有人知道,如何找到默认图标?而且,我不想使用任何windows api调用,我想自己编写函数.问题是我不知道所有图标中哪一个是默认图标.

c++ windows resources icons portable-executable

4
推荐指数
1
解决办法
2057
查看次数

如何在c/c ++中没有导入表的情况下构建可执行文件?

我在这里找到了一个修复导入表的工具,但是如果没有在c/c ++中首先构建导入表的PE可执行文件怎么样?

portable-executable

4
推荐指数
1
解决办法
2179
查看次数

寻找原始入口点

我希望能够通过查看 PE 标头找出出现在入口点的代码的来源。

比如这段代码就是我的程序的起始代码(401000h)

00401000 >/$ 58             POP EAX                                  ;  kernel32.76E93677
00401001  |. 2D 77360100    SUB EAX,13677
00401006  |. BB 4A184000    MOV EBX,<JMP.&kernel32.VirtualProtect>
Run Code Online (Sandbox Code Playgroud)

我想知道这段代码是从哪里来的。如何在不手动扫描我的文件的情况下找到它?(为了完成这个例子,这里有一个来自同一个文件的 hexdump,代码现在位于 200h)

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000200   58 2D 77 36 01 00 BB 4A  18 40 00 
Run Code Online (Sandbox Code Playgroud)

如何从虚拟入口点 (401000h) 到达原始入口点 (200h)?我当然尝试自己解决。但我错过了一些东西。一开始我是这么想的:

.text[ Entrypoint (1000h) - VirtualOffset (1000d) ] = 原始入口点,因为文件对齐 = 200,原始入口点位于我的 .text 部分的最开始,我想我可以将它用于所有可执行文件。

解决了,我在计算原始入口点时犯了愚蠢的错误

.text[ 入口点 - 虚拟偏移量 ] + 文件对齐 …

windows executable portable-executable

4
推荐指数
1
解决办法
4536
查看次数

在PE文件中跳转存根

最近我反汇编了一个DLL(用c/c ++编写)并注意到代码段中有很多"跳转存根".这些存根只会跳转到DLL中的函数.

例如:

jmp foo() 
jmp foo2()
...
Run Code Online (Sandbox Code Playgroud)

为什么编译器(Visual Studio 2012)在二进制文件中包含这些函数存根?

谢谢!

c++ windows reverse-engineering portable-executable

4
推荐指数
1
解决办法
550
查看次数

DVCLAL的所有可能值列表是什么?

当我遇到这个功能时,我正在阅读SysUtils:

function ALR: Pointer;
var
  LibModule: PLibModule;
begin
  if MainInstance <> 0 then
    Result := Pointer(LoadResource(MainInstance, FindResource(MainInstance, 'DVCLAL',
      RT_RCDATA)))
  else
  begin
Run Code Online (Sandbox Code Playgroud)

之后,我搜索了什么是DVCLAL,我发现了这个问题.

Delphi编译器发送给DVCLAL资源的所有可能签名是什么?

delphi compiler-construction portable-executable delphi-xe3

4
推荐指数
2
解决办法
1473
查看次数

__imp_ 符号的语义

调用 DLL 函数涉及链接器生成存根,除非函数被声明,__declspec(dllimport)在这种情况下存根可以被绕过,以支持直接对导入表的间接调用,这样效率更高,例如

__declspec(dllimport) void ExitProcess(int);
ExitProcess(0);
Run Code Online (Sandbox Code Playgroud)

产生

call qword ptr [__imp_ExitProcess]
Run Code Online (Sandbox Code Playgroud)

where__imp_ExitProcess解析为可执行文件中导入表中的一个位置。

我试图弄清楚究竟是如何__imp_ExitProcess解决的。可以肯定的是,它作为 kernel32.lib 中的一个符号出现,但该符号具有存储类IMAGE_SYM_CLASS_EXTERNAL、段号零和值零,这相当于只是说“这将在其他地方定义”而没有实际定义它。

__imp_前缀是否具有特殊含义,即链接器是否注意到该前缀并将其作为将符号解析为名称已删除该前缀的 DLL 函数的导入表条目的指令?还是有其他事情发生?

windows dll linker reverse-engineering portable-executable

4
推荐指数
1
解决办法
2710
查看次数

仅从PE文件中提取.text部分

我试图从PE文件(一个DLL)中提取.text部分,即代码.在Linux或某些python或ruby lib中是否有任何简单的工具可以让我轻松完成这项工作?

text portable-executable

4
推荐指数
1
解决办法
1560
查看次数

如何在Windows PE 32位可执行文件中为我的代码洞穴腾出空间

所以我想在minesweeper.exe中为我的代码洞穴腾出空间(典型的Windows XP扫雷游戏,链接:Minesweeper).所以我通过CFF Explorer修改了文件的PE头,以增加该.text部分的大小.

SEGS

我尝试将.text段的原始大小增加1000h(新大小为3B58),但Windows无法找到入口点并且游戏无法启动.然后我尝试增加该.rsrc部分的大小,添加一个新的部分,增加图像大小,但这些尝试都没有成功,Windows说"这不是x32可执行文件".

所以这就是问题:如何为我的代码洞穴腾出空间?我不想搜索编译器留下的空白空间,我想为我的代码提供漂亮而干净的1000h字节.这个教程以及如何在不破坏游戏的情况下做到这一点的详细解释将是伟大的!(是的,我实际上正在攻击扫雷)

windows x86 assembly portable-executable

4
推荐指数
1
解决办法
1496
查看次数

代码在Windows中签署exe文件时存储的数字签名在哪里?

正如问题标题中所述.但是,我正在使用"技巧",我在运行时使用可执行文件之后存储额外的数据(参见此处).

签署我的可执行文件似乎打破了这个"技巧",所以我的问题是签名存储在exe(PE)文件中的位置?

我正在使用signtoolmicrosoft来签署我的可执行文件.

windows winapi code-signing portable-executable

4
推荐指数
2
解决办法
1793
查看次数