Articles of 可移植可执行文件

在Linux中创build一个与系统无关的最小Python脚本

我的目的是尝试编译这样一个Linux Python最小的基础,这是完全可移植的,独立于系统的(也就是说它甚至不与系统安装的Python基础进行交互)。 它在Windows下相对容易,除了Python二进制文件以外,还有一些最小的但是自定义的模块,这些模块正在被这个可移植的Python库加载。 但是,我也很难在Linux下实现这个目标,因为从头开始编译Python仍然会从系统(例如/usr/lib/python2.6)加载模块,而不是从它自己的Lib子目录加载,一旦我把这个Python的基地移到其他地方了。 如果可能,是否有一种方法可以将“python”编译为更多基于Linux的发行版,而不是编译的版本? 编辑 :其实,当我试图将python2.6(或只是python)到已经设置的Python基地(这是工作,因为它应该在Windows下,但它的输出 Could not find platform independent libraries <prefix> Could not find platform dependent libraries <exec_prefix> Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] under Linux instead. 从我所知道的情况来看,它可能与LIBDIR被设置为(exec_prefix)/lib/python$(VERSION)而不是我最近设置的(exec_prefix)/lib 。 有没有办法定义哪些文件夹和文件读取,而不是默认的? Makefile正确处理它(make和make install将它放到正确的lib文件夹中)。 但是在使用farfromhome的print pth方法时,它仍然倾向于从/home/arnold/Python/lib/python2.6加载,而不是/home/arnold/Python/lib 。 有没有办法强制python加载自定义LIBDIRpath而不是默认的path? 注意 :此安装的文件和文件夹结构与库存Linux或Windows Python安装不同

git的“make”中有哪些文件需要运行git?

我试图“移植”git,所以我想把所需的可执行文件从git的make过程发送到我的托pipe的web服务器。 我可以这样做吗? 你认为可执行文件会起作用吗?

为什么有时.data节的虚拟大小比原始大小大?

最近我发现,PE中的数据段可以具有比原始大小更大的虚拟大小(在文件中)。 这很令人惊讶。 有人说这是未初始化数据的影响。 但是在分析一些PE之后,我无法真正find这些额外的数据。 这里是一些程序的PEDump结果的链接: “你好世界”PEDump 正如你所看到的,.data节具有比原始大小更大的虚拟大小。 为什么在这个特定的例子中是这样的?

如何在一个确定的地址(gcc,linux)的可执行文件中创build一个“空”空间?

我基本上想要做的是让另一个程序把数据写入这个“空白空间”,让可执行文件“工作” 我想给应用程序添加一个签名,然后写入数据,稍后再search,但这听起来不太合适。 现在,其他重要的事情…我知道应该可以通过使用如下代码来创build代码洞: void function(void) { __asm { nop nop nop nop }; } 那么,即使这是几乎相同的(除了它将在.data部分,所以不可执行): const char data[3]; 那么问题是另一个应用程序将不会有一个确定的地址写入。

PE是每个DLL还是每个exe的“IMPORT ADDRESS TABLE”?

有谁知道在Windows上的PE可执行文件格式的“导入地址表”是“每个DLL”还是“每个EXE”?

PIMAGE_EXPORT_DIRECTORY – 内存访问错误

我正在尝试在kernel32.dll中findloadlibrary的RVA。 我已经阅读了几个文件parsingPE头,但我似乎无法找出为什么我的指向导出目录似乎无效。 hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (hFile == INVALID_HANDLE_VALUE) { err = GetLastError(); return err; } hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); if (hFileMapping == 0) { err = GetLastError(); CloseHandle(fileName); return err; } lpFileBase = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0); if (lpFileBase == 0) { err […]

将两个程序合并成一个?

如果我有两个窗口可执行文件,我可以将它们合并成一个可执行文件,然后依次运行它们? 我试图用一个简单的程序,把它们都读成一个,这样粗暴而严格地完成。 结果是第二个程序运行,但第一个程序从来没有。 下面我试图更好地解释这一点: C:\> bind.exe a.exe b.exe >out.exe b.exe是在a.exe之后写入out.exe如果你看看out.exe,它看起来像a.exe然后b.exe,写成二进制,包括标题和其他信息,不应该重复两次。 运行它会导致b.exe正在运行,而a.exe不会运行。 我尝试切换的顺序 C:\> bind.exe b.exe a.exe >out.exe 在这种情况下运行a.exe。 基本上这个方法不起作用,那么我应该怎么做呢? 我考虑用hex编辑器做一些事情,同时遵循windows PE格式 (用于windows可执行文件)的解释格式,并删除头文件等,但我觉得这样做的时间消耗较less。

为什么段虚拟地址需要连续?

我目前正在做一些工作,需要我从PE格式的可执行文件中删除部分。 首先,我刚刚删除了IMAGE_SECTION_HEADER ,更改了IMAGE_FILE_HEADER中的 NumberOfSections字段,重新计算了IMAGE_OPTIONAL_HEADER中的 SizeOfImage / SizeOfHeaders,并将以下部分的原始地址移动了已删除部分的原始大小。 但是,Windows拒绝加载错误消息“XXX不是有效的Win32应用程序”的文件。 我一直在挣扎一会儿,但也试图通过删除部分的虚拟大小来移动以下部分的虚拟地址,一切工作正常。 什么是虚拟地址需要连续的原因,不能有任何差距? 我试图通过正式的体育文件阅读,但没有成功。 我一直认为,只要SizeOfImage具有正确的值,那么每个部分的地址是什么都没有关系。

PE文件格式IAT函数地址何时被设置

我谷歌了一下,并阅读http://en.wikipedia.org/wiki/Portable_Executable,但我似乎无法find何时写入导入地址表地址。 这是否发生在编译? 或者当可执行文件运行?

在c中使用exe文件

(在Windows 8上工作)我试图得到一个exe文件(PE32格式)部分标题的大小与c。 从我读到的,这个字段的偏移是60,所以我试着从那里读。 这是我使用的代码: unsigned char offset; fseek(file, 60, SEEK_SET); fread(&offset, sizeof(offset), 1, file); printf("%hu", offset); 我的问题是如何获得部分标题的大小? 如果它不在抵消60,我怎么能find这个?