标题:好久没新帖子了自己发一个,关于对于VB编译出的EXE的文件内部结构的见解
只看楼主
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
结帖率:92.31%
 问题点数:0 回复次数:5 
好久没新帖子了自己发一个,关于对于VB编译出的EXE的文件内部结构的见解
以前闲着没事干,右击我VB写出来的EXE后发现可以解压!(可能大家也知道,知道的请不要喷我无知,谢谢)(纯属无聊,有兴趣的可以自己尝试)
解压后应该有以下文件和文件夹:
文件:
.data
.text
文件夹:
.rsrc

我用记事本打开.text 发现大量乱码 但是筛选其中的可读字符,发现有些特定区域是应用程序注释各个Form的 Caption 讯息,所以我怀疑这个“.text”文件就是存储软件的运行代码的!反编译程序很可能就是凭借这而反编译的。
结合我使用反编译程序发现只能反编译出来Form的Caption和工程的属性,能确定的是,因为只有这些讯息不是乱码,所以才反编译的出来,而其他代码则因为是乱码无法反编译出来。(纯属科普,毫无实际意义。。)

.data文件是空的,我也不知道是干嘛的。

.rsrc文件夹超级有用!
打开该文件夹可以发现两个子文件夹:
0
2052

其中0文件夹是存储你的ICO图标的!我就有过要二次开发自己的程序却发现ICO图标被我删除了。。。结果跑到以前写出来的EXE里面解压得到文件夹里找到ICO图标再用……
0文件夹内有ICON文件夹和GROUP_ICON文件夹,其中ICON文件夹就是存储图片的,GROUP_ICON文件夹中有个文件(不是图片),我怀疑是存储应用程序运行中不同状态下的ICO图标该使用ICON文件夹中的哪个ICO图片的讯息的。

2052文件夹中有VERSION文件夹,我的程序解压出来的文件夹里VERSION文件夹只有“1”文件(无后缀名)
记事本打开该文件,未发现任何有用的讯息,大家谁能找出来它的用处请在下面回复哦~~~


感觉语无伦次,请勿怪罪。

[ 本帖最后由 renxiaoyao36 于 2015-7-14 09:01 编辑 ]
搜索更多相关主题的帖子: 记事本 文件夹 软件 工程 
2015-07-14 08:59
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
高!我怎么解压不了呢?

能编个毛线衣吗?
2015-07-14 09:41
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
反汇编后几个段的含义
预定义段

   一个WindowsNT的应用程序典型地拥有9个预定义段,它们是.text、.bss、.rdata、.data、.rsrc、.edata、.idata、.pdata和.debug。一些应用程序不需要所有的这些段,同样还有一些应用程序为了自己特殊的需要而定义了更多的段。这种做法与MS-DOS和Windows3.1中的代码段和数据段相似。事实上,应用程序定义一个独特的段的方法是使用标准编译器来指示对代码段和数据段的命名,或者使用名称段编译器选项-NT——就和Windows3.1中应用程序定义独特的代码段和数据段一样。
   以下是一个关于Windows NT PE文件之中一些有趣的公共段的讨论。

可执行代码段,.text

   Windows 3.1和Windows NT之间的一个区别就是WindowsNT默认的做法是将所有的代码段(正如它们在Windows3.1中所提到的那样)组成了一个单独的段,名为“.text”。既然WindowsNT使用了基于页面的虚拟内存管理系统,那么将分开的代码放入不同的段之中的做法就不太明智了。因此,拥有一个大的代码段对于操作系统和应用程序开发者来说,都是十分方便的。
  .text段也包含了早先提到过的入口点。IAT亦存在于.text段之中的模块入口点之前。(IAT在.text段之中的存在非常有意义,因为这个表事实上是一系列的跳转指令,并且它们的跳转目标位置是已固定的地址。)当WindowsNT的可执行映像装载入进程的地址空间时,IAT就和每一个导入函数的物理地址一同确定了。要在.text段之中查找IAT,装载器只用将模块的入口点定位,而IAT恰恰出现于入口点之前。既然每个入口拥有相同的尺寸,那么向后退查找这个表的起始位置就很容易了。

数据段,.bss、.rdata、.data

   .bss段表示应用程序的未初始化数据,包括所有函数或源模块中声明为static的变量。
   .rdata段表示只读的数据,比如字符串文字量、常量和调试目录信息。
  所有其它变量(除了出现在栈上的自动变量)存储在.data段之中。基本上,这些是应用程序或模块的全局变量。

资源段,.rsrc

  .rsrc段包含了模块的资源信息。它起始于一个资源目录结构,这个结构就像其它大多数结构一样,但是它的数据被更进一步地组织在了一棵资源树之中。以下的IMAGE_RESOURCE_DIRECTORY结构形成了这棵树的根和各个结点。
 
VC编译的汇编代码
1、各段的含义:
_TEXT:代码段
_DATA:已初始化数据段
CONST:常数段
_BSS:未初始化数据段
STACK:堆栈
TLS:线程局部存储有关的数据
 
2、变量声明的编译,给变量分配内存、
如: int i可编译成:
_i$=8,表示将变量I安排在EBP+8处

授人于鱼,不如授人于渔
早已停用QQ了
2015-07-14 09:53
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
VB6的编译是混合型的编译,数据段一般没东西(.data),它的内容混杂在 代码段中(.text)

而 .rsrc 段就是保存各种资源用的,如ICO,资源编辑器写进去的内容,我感觉也是放在这个段里面的。
VERSION 这个目录我感觉应该是版本信息之类的。

授人于鱼,不如授人于渔
早已停用QQ了
2015-07-14 09:56
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
得分:0 
回复 4楼 风吹过b
受教了,不过我自己在毫不知情的情况下猜测出来的也八九不离十,哎呀我好佩服自己啊(众人丢鸡蛋)
2楼所说的无法解压我没碰到过,你右击编译出来的EXE文件有个解压的应该
另:我使用360压缩有解压,可能WINRAR不能解压。

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-07-14 10:04
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
我们只使用 WINRAR ,所以没有这个解压功能。

360压缩有这个解压,其实这个功能针对普通用户来说,根本就是多余的,难道360压缩解压了EXE文件后,修改其中的内容,还能还原不成?
还原是 连接程序 的事情,这个事是 LINK.EXE 干的事情。

编译的程序:
1、预处理。处理 如 #if ....  ,debug 命令 。对于 C 来说,还有一个是 宏 的处理,也是在这个阶段。
2、编译,生成 OBJ 文件。 C2.exe
3、连接,生成 EXE 文件。 LINK.EXE

授人于鱼,不如授人于渔
早已停用QQ了
2015-07-14 11:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-455376-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021912 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved