标签: portable-executable

我在哪里可以找到CorFlags值的每一位含义的参考?

我正在搞乱一些相当低级别的东西,并试图确定为什么我使用CorFlags.exe实用程序得到不同的输出.作为参考,输出如下:

$ corflags test2.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.0.30319.17929
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x1
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 0
Signed    : 0

$ corflags test.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.0.30319.17929
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x20003
ILONLY    : 1
32BITREQ  : …

.net corflags low-level portable-executable bit-fields

11
推荐指数
1
解决办法
2500
查看次数

便携可执行结构说明

我正在学习可移植可执行文件的结构.我浏览了MSDN文章,但我对此感到有些困惑.我对它们的精确结构和功能感到困惑.

任何人都可以帮助我,或者请您参考一篇很好的文章吗?

windows portable-executable

10
推荐指数
2
解决办法
3798
查看次数

C库从Linux读取EXE版本?

我可以在Linux中使用哪个库来返回Explorer的Version选项卡中列出的Windows EXE文件的属性?这些是产品名称,产品版本,描述等字段.

对于我的项目,EXE文件只能从内存中读取,而不能从文件中读取.我想避免将EXE文件写入磁盘.

c linux windows portable-executable

10
推荐指数
1
解决办法
3149
查看次数

如何强制GDB在"没有函数包含所选帧的程序计数器"时反汇编代码?

如何强制GDB在"没有函数包含所选帧的程序计数器"时反汇编代码?

调试程序,从绝对地址开始,0x00402200在尝试反汇编此地址的代码时,我得到以下输出:

[New Thread 65212.0x10378]

Breakpoint 1, 0x00402200 in ?? ()
(gdb) stepi
0x00402202 in ?? ()
(gdb) stepi
0x00402207 in ?? ()
(gdb) stepi
0x0040220a in ?? ()
(gdb) stepi
0x0040220f in ?? ()
(gdb) disassemble
No function contains program counter for selected frame.
(gdb) stepi
0x00401000 in start ()
Run Code Online (Sandbox Code Playgroud)

正在调试的文件是用于教育目的的Win32 PE(逆向工程).

有没有办法告诉GDB开始在地址上拆解?否则,我的替代方案(即其他工具)是什么?

debugging x86 assembly gdb portable-executable

10
推荐指数
2
解决办法
5504
查看次数

在.NET中解析普通的Win32 PE文件(Exe/DLL)

我需要解析普通的Win32 DLL/Exe并从中获取所有导入和导出以在控制台或GUI(即Win Forms)上显示.是否可以通过读取其导出/导入表并从中获取托管类型来解析C#.NET中的Win32 DLL/Exe?由于它是非托管PE,.NET不允许您将非托管PE文件转换为托管.NET程序集,它只生成COM托管程序集.

如何解析这些表并以托管形式获取所有方法(签名).(例如,如果char*作为参数,它应显示为IntPtr).

c# assemblies marshalling .net-3.5 portable-executable

9
推荐指数
1
解决办法
6184
查看次数

从独立于开源平台的Java代码替换Windows*.exe中的图标

首先,这与从Java类生成EXE的常见问题不重复.我不需要这样做.

要解决NetBeans RFE#64612而不需要手动步骤,我需要一个Java(6+)库,它可以获取现有的 Windows *.exe文件,并用通用格式的替代品替换其图标.可执行文件是通用的并且是预构建的(以二进制形式分发),已经知道如何加载特定于应用程序的配置文件,然后使用各种应用程序JAR等启动JRE.唯一的问题是它有一个通用图标,我想将该图标替换为纯Java构建的一部分,并带有特定于应用程序的图标,因此它看起来更漂亮.

该库必须在非病毒开源许可下提供; 跨平台(必须在Windows,Linux,Mac,Solaris上运行),因此无法分叉某些特定于操作系统的帮助工具; 并且必须接受PNG输入,尽管EXE必须在XP上工作,因此根据Wikipedia应该嵌入BMP格式.在高层次上,假设Ant作为构建工具,我想要这样的东西:

<replaceicon from="app.exe" to="hello.exe" icon="hello.png"/>

有谁知道是否已经存在符合这些规范的工具?从各种网络搜索,我发现Launch4J,但这似乎只是叉windres的实际工作,因此不平凡的便携性.我发现JSmooth看起来更有前途 - 似乎包含用于处理ICO编解码器和操作PE文件的Java代码 - 但它是GPL.WinRun4J看起来使用本机代码进行图标操作,尽管我很难跟踪它的来源.据说Jimi处理ICO格式(标准javax.imageio似乎也是如此),但我想没有更新PE资源的工具.

java exe bmp ico portable-executable

9
推荐指数
1
解决办法
1576
查看次数

PE文件操作码

我只是在编写PE文件解析器的过程中,我已经达到了解析和解释PE文件中实际代码的程度,我假设它存储为x86操作码.

例如,DLL中的每个导出都指向函数将存储在内存中的RVAs(相对虚拟偏移),并且我编写了一个函数来将这些RVA转换为物理文件偏移.

问题是,这些是真正的操作码,还是其他的?

是否依赖于编译器/链接器关于函数如何存储在文件中,或者它们是一个还是两个字节的X86操作码.

例如,Windows 7 DLL"BWContextHandler.dll"包含四个加载到内存中的函数,使它们在系统中可用.第一个导出的函数是'DllCanUnloadNow',它位于文件中的偏移0x245D处.该数据的前四个字节是:0xA1 0x5C 0xF1 0xF2

这些一个或两个字节的操作码是这样的,还是完全不同的?

如果任何人都可以提供有关如何检查这些信息的任何信息,我们将不胜感激.

谢谢!

经过一些进一步的阅读,并通过IDA的演示版本运行文件,我认为我说第一个字节0xA1是一个单字节操作码,这意味着mov eax.我从这里得到了它:http://ref.x86asm.net/geek32.html#xA1,我认为它暂时是正确的.

但是,我对下面的字节如何构成指令的其余部分感到困惑.从我所知道的x86汇编程序来看,移动指令需要两个参数,即目标和源,因此指令是将(某些)移动到eax寄存器中,并且我假设某些内容来自以下字节.但是我不知道如何阅读这些信息:)

windows x86 assembly parsing portable-executable

9
推荐指数
2
解决办法
2128
查看次数

Microsoft C库中的重复符号

我正在为Windows PE格式的目标文件编写一个链接器,我已经到了可以将Microsoft编译器生成的目标文件链接在一起的阶段,但是当我尝试与libcmt.lib链接时,我得到了很多重复符号.

例如,cosl由库中的三个不同对象定义.所有三个都指向不同位置的定义,并且所有三个看起来都是真实的,例如它们指向命名的文本段.text$mn并具有存储类IMAGE_SYM_CLASS_EXTERNAL.

是否是这些是备用版本的情况,并且链接器应该根据某些标准选择一个,或者我是否误解了关于PE库格式的语义?

c windows linker portable-executable visual-c++

9
推荐指数
1
解决办法
260
查看次数

Windows在调用Main()之前做了什么?

Windows必须做一些事情来解析PE头,在内存中加载可执行文件,并将命令行参数传递给main().

使用OllyDbg我已将调试器设置为在main()上中断,以便我可以查看调用堆栈: http://puu.sh/t5vxB/3d52089d22.png

好像符号缺失所以我们无法获得函数名称,只能看到它的内存地址.但是我们可以看到main的调用者kernel32.767262C4,也就是被调用者ntdll.77A90FD9.在堆栈的底部,我们看到RETURN ntdll.77A90FA4,我认为它是第一个被调用来运行可执行文件的函数.看起来传递给该函数的值得注意的参数是Windows的结构化异常处理程序地址和可执行文件的入口点.

那么这些函数究竟是如何最终将程序加载到内存中并为入口点执行做好准备呢?调试器之前main()是否显示了OS执行的整个过程?

windows x86 assembly portable-executable

9
推荐指数
1
解决办法
2363
查看次数

将.NET核心应用程序发布为可移植可执行文件

我有一个简单的.net核心应用程序,并通过以下命令发布它:

 dotnet publish -c Release -r win10-x64
Run Code Online (Sandbox Code Playgroud)

SqlLocalDbStarter.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Win32.Registry" Version="4.5.0" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

当发布过程完成dotnet win10-x64bin\Release文件夹中创建文件夹然后打开后,该文件夹包含publish文件夹和一些dll和exe文件.

对我来说有一些问题:

  • exe我需要PE应用程序中的哪一个文件(内部/外部发布文件夹)?
  • 为什么当我剪切exe文件并将其移动到其他地方时它不会运行(没有消息)?
  • 如果我需要所有dll文件来运行应用程序,那么我有两个选项(内部/外部发布文件夹),内部发布文件夹大小为66 MB但外部发布文件夹为1 MB.
  • 我想有一个exe文件来运行我的程序没有DLL文件.

文件夹大小图像

.Net信息

c# publish self-contained portable-executable .net-core

9
推荐指数
2
解决办法
1万
查看次数