Articles of 可移植可执行文件

如何在Linux中将PE(Portable Executable)格式转换为ELF格式

将PE二进制文件转换为ELF二进制文件的最佳工具是什么? 以下是这个问题的一个简短的动机: 假设我有一个简单的C程序。 我编译它使用gcc的Linux(这给ELF),并使用'i586-mingw32msvc-gcc'的Windows(这给了一个PE二进制文件)。 我想分析这两个二进制文件的相似之处,使用Bitblaze的静态分析工具 – 藤( http://bitblaze.cs.berkeley.edu/vine.html ) 现在葡萄藤没有很好的支持PE二进制文件,所以我想转换PE-> ELF,然后进行比较/分析。 由于所有的分析都必须在Linux上运行,所以我更喜欢在Linux上运行的实用程序/工具。 谢谢

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

所以我想在minesweeper.exe(典型的Windows XP扫雷游戏,链接: 扫雷 )中为我的代码洞穴腾出空间。 所以我通过CFF资源pipe理器修改了文件的PE头,增加了.text部分的大小。 我尝试增加.text段的原始大小1000h(新大小是3B58),但Windows无法find入口点,游戏无法启动。 然后我尝试增加.rsrc部分的大小,添加一个新的部分,增加图像大小,但是这些尝试都没有成功,Windows说“这不是x32可执行文件”。 所以这里是一个问题:我如何为我的代码洞穴腾出空间? 我不想search编译器留下的空白空间,我想为我的代码打印1000h字节。 一个教程,以及如何做到这一点,而不破坏游戏的详细解释将是伟大的! (是的,我其实是黑客扫雷)

如何从页眉或页脚确定PE可执行文件的大小

假设你有一个数据stream或一个字节块你想雕刻,你怎么能确定可执行文件的大小? PE可执行格式中有许多头文件,但是我可以使用哪些头文件来确定(如果可能)可执行文件的总长度? 这是一个文件格式的图片。

PE文件中没有.BSS

这是简短的控制台应用程序示例 static char buffer[4096]; int main() { for(int i=0;i<4096;i++) { buffer[i] = 1234; } return 0; } 据我所知,由编译器产生的'exe'文件应该包含.bss节来存储'buffer'variables。 我正在使用Tiny C编译器,生成的文件不包含任何对.bss的引用。 DOS Header Magic number: 0x5a4d (MZ) Bytes in last page: 144 Pages in file: 3 Relocations: 0 Size of header in paragraphs: 4 Minimum extra paragraphs: 0 Maximum extra paragraphs: 65535 Initial (relative) SS value: […]

如何判断一个Windows PE文件是一个控制台子系统还是一个Windows子系统编程?

基本上我需要一个程序,将从控制台对应窗口sortingWindows.exe。 一个文件扫描仪: SortExe(file exe) { if (IsPeWindows(exe)) { AddToList1(exe); } else if (IsPeConsole()) { AddToList2(exe); } } 我如何实现IsPeWindows或IsPeConsole()? 只要是c,c ++,c#或visual basic的语言解决scheme之一,我并不特别在意。

澄清二进制文件(PE / COFF&ELF)格式和术语

在术语上我很困惑。 input到链接器的文件称为对象文件 。 链接器产生一个Image文件 ,这个文件又被加载器用作input。 我从“MS PE&COFF规格” Q1。 图像文件也被称为Binary Image , Binary File或只是Binary 。 对? Q2。 因此,根据上述术语,PE / ELF / COFF是图像文件的格式而不是目标文件的格式。 对? 但是http://www.sco.com/developers/gabi/latest/ch4.intro.html说 本章描述了被称为ELF(可执行和链接格式)的目标文件格式。 有三种主要types的目标文件。 可重定位文件包含适合与其他目标文件链接的代码和数据,以创build可执行文件或共享目标文件。 可执行文件保存适合于执行的程序; 该文件指定exec(BA_OS)如何创build程序的过程映像。 共享对象文件保存适合在两个上下文中链接的代码和数据。 首先,链接编辑器[见ld(BA_OS)]处理与其他可重定位和共享对象文件的共享对象文件,以创build另一个对象文件。 其次,dynamic链接器将其与可执行文件和其他共享对象结合起来以创build过程映像。 他认为Object File和Image File都是ELF格式,他完全不区分对象和图像文件,而是将它们通常称为Object文件。 是不是错了? Q3。 我知道PE来自COFF。 但为什么PE格式的Microsoft规格被命名为Microsoft Portable Executable“和Common Object File Format Specification” 。 他们还支持COFF吗? 如果他们在哪个操作系统? 我以为PE很早就完全取代了COFF。

导出的DLL函数不是按字面顺序排列的?

那么今天我遇到了一个怪事 前一段时间,我写了自己的GetProcAddress版本来获取远程进程的函数地址。 我显然花了很多时间阅读PE体系结构来找出解决这个问题的最好方法。 从PECOFF v8规范(我认为它是最新的官方规范)中,有关于Export Name Pointer Table的以下符号: 导出名称指针表是到导出名称表中的地址数组(RVA)。 指针每个都是32位,并且与图像库相关。 这些指针在词汇上sorting以允许二进制search。 所以在编写我的GetProcAddress版本的时候就考虑了这个问题。 很显然,在使用线性search的二进制search的情况下,在导出表中引用KERNEL32.dll(1300+个导出的函数)会有很好的效率提升。 这工作了一段时间,直到今天,当我遇到一个奇怪的问题。 看起来,Kernel32中的一些导出函数实际上并不是按照词汇顺序排列的,而这是抛弃了我的二分查找。 以下是使用我将在下面发布的函数导出的Dll转储的摘录: Ordinal: 810 Name: K32QueryWorkingSetEx Ordinal: 811 Name: LCIDToLocaleName Ordinal: 812 Name: LCMapStringA Ordinal: 813 Name: LCMapStringEx Ordinal: 814 Name: LCMapStringW Ordinal: 815 Name: LZClose Ordinal: 816 Name: LZCloseFile Ordinal: 817 Name: LZCopy Ordinal: 818 Name: LZCreateFileW Ordinal: 819 Name: […]

可移植可执行的结构说

我正在学习可移植可执行文件的结构。 我通过MSDN文章,但我有点困惑。 我对他们精确的结构和function有一些困惑。 任何人都可以帮助我,或者请参阅我的一个很好的文章呢?

如何创build包括mysql-ODBC,所有DLL和OCX文件的Windows便携式应用程序?

我有一个应用程序,编程在VB6需要一些DLL文件和OCX文件安装在Windows 7中。 我已经有一个使用innosetup创build的安装程序,其中包含所有需要的文件,并且还安装了用于Windows的x86 连接器 – ODBC ( x86,64位) 如果我只是把所有的文件放入一个文件夹安装doesent工作,我得到的错误 组件MSDATGRD.OCX或其某个依赖关系未正确注册:文件丢失或无效 我试图searchmsdatgrd.ocx portableapp,但没有主意 是否有一个简单的解决方法,使这个应用程序无需安装运行? 您可以将我想要打包的文件下载到PortableApp中。 我试图用依赖沃克打开Setup.exe,但不幸的是我没有足够的专业知识来使用该工具。 这里有一个截图 虽然依赖walker的输出似乎是欺骗性的,请看这里: 赢7,64位,DLL的问题 无论如何:我在这里下载了这9个文件并打包 ,现在它显示了更多的其他文件丢失:pastebin.com/8LawEbuk 7这个doesent似乎导致任何地方导致依赖沃克太旧 我正在寻找一些非常简单的东西,不pipe最终的文件大小,因为我不是一个Windows程序员

C库从Linux读取EXE版本?

有一个我可以在Linux中使用的库,它将返回Explorer版本选项卡中列出的Windows EXE文件的属性? 这些是像产品名称,产品版本,说明等字段。 对于我的项目,EXE文件只能从内存中读取,而不能从文件中读取。 我想避免将EXE文件写入磁盘。