VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 5510|回复: 10

[原创] [Open Source] Obj 文件格式分析。。

[复制链接]
发表于 2012-9-30 22:00:37 | 显示全部楼层 |阅读模式
本帖最后由 19900603 于 2012-9-30 22:04 编辑

http://www.vbgood.com/thread-115153-1-1.html

捣鼓了几个晚上 基本上捣鼓完了。。。

有图有真相 有源码有真相  

压缩包内付 COFF文件格式文档

分析出来的数据 图上基本都有了。。 如有不对的地方 还请大家多多指教

代码这玩意 藏着掖着没意思,当然商业型的咱就不说拉 哈哈 。分享了





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

已更新:修复无错版----9楼  发表于 2012-10-2 17:52

评分

参与人数 4威望 +43 人气 +8 收起 理由
qq275158045 + 10 + 2 虽然不懂 但和你学到很多东西 给你+++++
404022 + 8 + 1 很给力!
acme_pjz + 15 + 3 精品文章
wtywtykk + 10 + 2 很给力!

查看全部评分

本帖被以下淘专辑推荐:

 楼主| 发表于 2012-10-2 17:45:26 | 显示全部楼层
本帖最后由 19900603 于 2012-10-2 17:50 编辑

额 修改后编译时出错了。。。 检查了文件貌似是大了
已修复。。 可编译




给Ocx添加导出函数。。。。
但是调用时崩溃了。。指向地址不对。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

那你说旧版的标准DLL导出函数插件是怎么做的  发表于 2012-10-6 19:43
呃? 可以么  发表于 2012-10-2 19:30
你是直接修改obj文件的?其实修改Link参数也行啊  发表于 2012-10-2 18:00
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-30 22:12:47 | 显示全部楼层
嗯 告诉大家个有意思的事。
下图符号表中有个符号叫做 ?Main@Module1@@AAGXXZ 的
只需把模块名和函数名改下就可以修改启动函数哦。。
但是 Ide中 还得加个 Main 函数。。。   有点鸡肋吧。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

给你推荐一个API函数:UnDecorateSymbolName  发表于 2012-10-1 10:36
其实可以实现汇编时函数的调用  发表于 2012-10-1 08:21
是的!不过还要声明Main还是很鸡肋的!不然做控制台时还不错的!  发表于 2012-10-1 06:12
比较在意那个修改启动函数,呵呵,有点类似cmd或者脚本之类  发表于 2012-9-30 23:20

评分

参与人数 1威望 +2 人气 +1 收起 理由
qq375397413 + 2 + 1 神马都是浮云

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2012-9-30 23:46:56 | 显示全部楼层
本帖最后由 menglv 于 2012-10-1 00:29 编辑

先收藏一个,以后慢慢研究,很有深度!
?Main@Module1@@AAGXXZ
这个函数确实很有意思
可以汇编时
call ?Main@Module1@@AAGXXZ
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-1 14:55:11 | 显示全部楼层
本帖最后由 19900603 于 2012-10-1 14:56 编辑

   UnDecorateSymbolName  Api 及相关参数
  1. Option Explicit
  2.                                                                  
  3. 'Undecorate 32位修饰名。
  4. Private Const UNDNAME_32_BIT_DECODE = &H800
  5. '启用全undecoration?
  6. Private Const UNDNAME_COMPLETE = &H0
  7. '为主要申报Undecorate的名称。返回[范围::]的名称。是否扩大了模板参数。
  8. Private Const UNDNAME_NAME_ONLY = &H1000
  9. '禁用扩展访问指定的成员?
  10. Private Const UNDNAME_NO_ACCESS_SPECIFIERS = &H80
  11. '禁用的声明语言规范的扩展?
  12. Private Const UNDNAME_NO_ALLOCATION_LANGUAGE = &H10
  13. '禁用的声明模型的扩展?
  14. Private Const UNDNAME_NO_ALLOCATION_MODEL = &H8
  15. '不要undecorate函数的参数?
  16. Private Const UNDNAME_NO_ARGUMENTS = &H2000
  17. '禁用扩张的CodeView修改此类型为主要申报?
  18. Private Const UNDNAME_NO_CV_THISTYPE = &H40
  19. '禁用扩张的主要声明的返回类型?
  20. Private Const UNDNAME_NO_FUNCTION_RETURNS = &H4
  21. '删除前导下划线,从微软的关键字。
  22. Private Const UNDNAME_NO_LEADING_UNDERSCORES = &H1
  23. '禁用扩展的静态或虚拟属性的成员?
  24. Private Const UNDNAME_NO_MEMBER_TYPE = &H200
  25. '禁用扩展微软的关键字?
  26. Private Const UNDNAME_NO_MS_KEYWORDS = &H2
  27. '在此类型为主要申报禁用扩展微软的关键字?
  28. Private Const UNDNAME_NO_MS_THISTYPE = &H20
  29. '禁用扩展的微软模式为用户定义的类型返回?
  30. Private Const UNDNAME_NO_RETURN_UDT_MODEL = &H400
  31. '不要undecorate特别的名称,如虚函数表,VCALL,矢量,元类型,等等。
  32. Private Const UNDNAME_NO_SPECIAL_SYMS = &H4000
  33. '禁用所有的这类型修饰符?
  34. Private Const UNDNAME_NO_THISTYPE = &H60
  35. '禁用扩展扔签名的功能和函数指针?
  36. Private Const UNDNAME_NO_THROW_SIGNATURES = &H100
  37. Private Declare Function UnDecorateSymbolName Lib "Dbghelp.dll" (ByVal DecoratedName As String, ByVal UnDecoratedName As String, ByVal UndecoratedLength As Long, ByVal Flags As Long) As Long

  38. Private Sub Command1_Click()
  39.     Dim Buf As String
  40.     Buf = String(255, 32)
  41.     UnDecorateSymbolName "?Main@Module1@@AAGXXZ", Buf, 255, UNDNAME_32_BIT_DECODE
  42.     MsgBox Trim(Buf)
  43. End Sub
  44.                         
复制代码

点评

@menglv 这个我知道 我研究内嵌汇编时就用了。。  发表于 2012-10-2 17:42
其实不是这样用的,直接内嵌汇编时call ?VB_Add1@modASMcallsVB@@AAGXXZ ,就是call另外一个函数!  发表于 2012-10-2 17:34
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-1 20:48:06 | 显示全部楼层
本帖最后由 19900603 于 2012-10-1 20:50 编辑

   搞定 可以做个 Obj编辑器了。。。。。
可以添加/修改  区段,区段数据,重定位表,符号表,字符串表
但是没删除功能   先发附件  求票票 求积分
有图有真相 有源码更有真相

PS:刚才拿C32Asm 打开了 Obj文件忘记关了。。 导致保存的时候无法打开文档
      害我找了半天。。。。 悲剧啊。。。。






'Obj操作类模块函数


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-1 22:02:18 | 显示全部楼层


ActiveX 里的Tlb文件。。。


ActiveX 里的导出函数声明??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

這是做什麼的ㄚ  发表于 2012-10-2 08:46
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-2 11:53:25 | 显示全部楼层
@students1
修改 Vb生成文件时的中间文件(Obj文件)的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-2 13:27:55 | 显示全部楼层
求 Tlb文件格格式分析资料啊  百度了 Google 了 就是没有了。。。。

点评

www.pscode.com/vb/ 搜索 typelib  发表于 2013-4-11 09:14
搜了 还是木有  发表于 2012-10-2 16:09
你搜索英文资料了么  发表于 2012-10-2 15:05
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-3 19:39:18 | 显示全部楼层
  其实 符号表内 还有个附加符号表没写。。 不过不影响使用
当符号表内的NumberOfAuxSymbols大于1时 则在当前符号表后跟随NumberOfAuxSymbols 个附加符号表
下面是 部分辅助符号表的声明  但是都和符号表一样 为 18个字节  读取出来可以自己转换
具体解释 还得看下面红色的usClass字段解释
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
'辅助符号表
'
Public Type SymbolTableNew
    '0   4   TagIndex    符号表索引对应的。BF(开始功能)符号记录。
    TagIndex                         As Long
    '4   4   TotalSize   函数本身的可执行代码的大小。如果函数是在其自己的节,节头中的原始数据的大小将大于或等于这一领域,这取决于对齐的考虑。
    TotalSize                        As Long
    '8   4   PointerToLinenumber 第一个COFF行号的功能项,或零,如果没有存在的文件偏移量。有关更多信息,请参见第5.3,?OFF行号,。
    PointerToLinenumber              As Long
    '12  4   PointerToNextFunction   记录下一个函数的符号表索引。如果该函数是在符号表中的最后一个,这个字段被设置为零。
    PointerToNextFunction            As Long
    '16  2                            未使用变量 只占位
    未使用                           As Integer
   
End Type
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
'■[接上面]■这个辅助符号表的格式多了
'0   4   未使用。
'4   2   LINENUMBER  源文件内的实际序行号(1,2,3,等),对应于。bf的或有效的记录。
'6   6   未使用。
'12  4   PointerToNextFunction(BF) 符号表的索引。BF符号记录。如果该函数是在符号表中的最后一个,这个字段被设置为零。未使用EF英孚教育记录。
'16  2   未使用。
'
'
'5.5.3。辅助格式:弱外部
'抵销    大小    领域    描述
'0   4   TagIndex    符号表索引SYM2,SYM1联系起来,如果没有找到的符号。
'4   4   特点    值IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY表明,没有图书馆,搜索SYM1应。
'8   10  未使用。
'
'
'5.5.4。4:辅助格式的文件
'抵销    大小    领域    描述
'0   18  文件名  填充空值如果小于最大长度的ASCII字符串,给出的源文件的名称;。
'
'
'5.5.5。辅助格式5节定义
'抵销    大小    领域    描述
'0   4   长度    部分数据的大小相同大小的节头中的原始数据。
'4   2   NumberOfRelocations 部分搬迁项目的数量。
'6   2   NumberOfLinenumbers 部分的行号的条目数量。
'8   4   校验和  公用数据的校验和。适用如果IMAGE_SCN_LNK_COMDAT标志被设置在节头。?OMDAT部分?,了解更多信息。
'12  2   数  一个节表的索引相关的部分; COMDAT选择设定为5时。
'14  1   选择    COMDAT选择号码。如果该节适用一个COMDAT部分。
'15  3   未使用。



 usClass是符号的存储类型标识。它指明了符号的存储方式。   其值与意义见下表:   
值 名称 说明   
NULL 0 无存储类型。   
AUTOMATIC 1 自动类型。通常是在栈中分配的变量。   
EXTERNAL 2 外部符号。当为外部符号时,iSection的值应该为0,如果不为0,则ulValue为符号在段中的偏移。   
STATIC 3 静态类型。ulValue为符号在段中的偏移。如果偏移为0,那么这个符号代表段名。   
REGISTER 4 寄存器变量。   
MEMBER_OF_STRUCT 8 结构成员。ulValue值为该符号在结构中的顺序。   
STRUCT_TAG 10 结构标识符。   
MEMBER_OF_UNION 11 联合成员。ulValue值为该符号在联合中的顺序。   
UNION_TAG 12 联合标识符。   
TYPE_DEFINITION 13 类型定义。   
FUNCTION 101 函数名。   
FILE 102 文件名。   
最后一个成员usNumAux是附加记录的数量。附加记录是用来描述符号的一些附加信息,为了便于保存,这些附加记录通常选择成为一条符号信息记录的整数倍(多数为1)。所以,如果这个成员的值为1,那么就表示在当前符号信息记录后附加了一条记录,用来保存附加信息。   附加信息的结构是与符号的类型以及存储类型相关的。不同的类型的符号,其附加信息(如果有的话)的结构也不同。如果你不在意这些内容,也可以把它们乎略。   当段的类型为FILE时,附加信息就是一个字符串,它是目标文件对应源文件的名称。其它类型在介绍PE时再进行详细讨论。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2023-3-27 02:17

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表