您的位置:程序门 -> 其他开发语言 -> 汇编语言



反汇编代码,需要知道具体执行过程


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


反汇编代码,需要知道具体执行过程
发表于:2007-06-21 15:27:15 楼主
最好能写成c语言

00439e18       8a06                           mov   al,byte   ptr   ds:[esi]
00439e1a       46                               inc   esi
00439e1b       8807                           mov   byte   ptr   ds:[edi],al
00439e1d       47                               inc   edi
00439e1e       01db                           add   ebx,ebx  
00439e20       75   07                         jnz   short   1.00439e29  
00439e22       8b1e                           mov   ebx,dword   ptr   ds:[esi]
00439e24       83ee   fc                     sub   esi,-4      
00439e27       11db                           adc   ebx,ebx    
00439e29     ^72   ed                         jb   short   1.00439e18  
00439e2b       b8   01000000             mov   eax,1  
00439e30       01db                           add   ebx,ebx
00439e32       75   07                         jnz   short   1.00439e3b
00439e34       8b1e                           mov   ebx,dword   ptr   ds:[esi]
00439e36       83ee   fc                     sub   esi,-4
00439e39       11db                           adc   ebx,ebx
00439e3b       11c0                           adc   eax,eax
00439e3d       01db                           add   ebx,ebx
00439e3f     ^73   ef                         jnb   short   1.00439e30
00439e41       75   09                         jnz   short   1.00439e4c
00439e43       8b1e                           mov   ebx,dword   ptr   ds:[esi]
00439e45       83ee   fc                     sub   esi,-4
00439e48       11db                           adc   ebx,ebx
00439e4a     ^73   e4                         jnb   short   1.00439e30
00439e4c       31c9                           xor   ecx,ecx
00439e4e       83e8   03                     sub   eax,3
00439e51       72   0d                         jb   short   1.00439e60
00439e53       c1e0   08                     shl   eax,8
00439e56       8a06                           mov   al,byte   ptr   ds:[esi]
00439e58       46                               inc   esi
00439e59       83f0   ff                     xor   eax,ffffffff
00439e5c       74   74                         je   short   1.00439ed2
00439e5e       89c5                           mov   ebp,eax
00439e60       01db                           add   ebx,ebx
00439e62       75   07                         jnz   short   1.00439e6b
00439e64       8b1e                           mov   ebx,dword   ptr   ds:[esi]
00439e66       83ee   fc                     sub   esi,-4
00439e69       11db                           adc   ebx,ebx
00439e6b       11c9                           adc   ecx,ecx
00439e6d       01db                           add   ebx,ebx
00439e6f       75   07                         jnz   short   1.00439e78
00439e71       8b1e                           mov   ebx,dword   ptr   ds:[esi]
00439e73       83ee   fc                     sub   esi,-4
00439e76       11db                           adc   ebx,ebx
00439e78       11c9                           adc   ecx,ecx
00439e7a       75   20                         jnz   short   1.00439e9c
00439e7c       41                               inc   ecx
00439e7d       01db                           add   ebx,ebx
00439e7f       75   07                         jnz   short   1.00439e88
00439e81       8b1e                           mov   ebx,dword   ptr   ds:[esi]
00439e83       83ee   fc                     sub   esi,-4
00439e86       11db                           adc   ebx,ebx
00439e88       11c9                           adc   ecx,ecx
00439e8a       01db                           add   ebx,ebx
00439e8c     ^73   ef                         jnb   short   1.00439e7d
00439e8e       75   09                         jnz   short   1.00439e99
00439e90       8b1e                           mov   ebx,dword   ptr   ds:[esi]
00439e92       83ee   fc                     sub   esi,-4
00439e95       11db                           adc   ebx,ebx
00439e97     ^73   e4                         jnb   short   1.00439e7d
00439e99       83c1   02                     add   ecx,2
00439e9c       81fd   00f3ffff         cmp   ebp,-0d00
00439ea2       83d1   01                     adc   ecx,1
00439ea5       8d142f                       lea   edx,dword   ptr   ds:[edi+ebp]
00439ea8       83fd   fc                     cmp   ebp,-4
00439eab       76   0f                         jbe   short   1.00439ebc
00439ead       8a02                           mov   al,byte   ptr   ds:[edx]
00439eaf       42                               inc   edx
00439eb0       8807                           mov   byte   ptr   ds:[edi],al
00439eb2       47                               inc   edi
00439eb3       49                               dec   ecx
00439eb4     ^75   f7                         jnz   short   1.00439ead
00439eb6     ^e9   63ffffff             jmp   1.00439e1e
00439ebb       90                               nop
00439ebc       8b02                           mov   eax,dword   ptr   ds:[edx]
00439ebe       83c2   04                     add   edx,4
00439ec1       8907                           mov   dword   ptr   ds:[edi],eax
00439ec3       83c7   04                     add   edi,4
00439ec6       83e9   04                     sub   ecx,4
00439ec9     ^77   f1                         ja   short   1.00439ebc
00439ecb       01cf                           add   edi,ecx
00439ecd     ^e9   4cffffff             jmp   1.00439e1e
00439ed2       5e                               pop   esi
发表于:2007-06-21 15:36:341楼 得分:0
是你断章取义还是完整功能的指令集?
发表于:2007-06-21 15:41:092楼 得分:0
是一段
单是是一段完整的功能
具体讲是upx的压缩算法,1.25版的
发表于:2007-06-21 16:24:273楼 得分:0
付费?
发表于:2007-06-21 16:47:334楼 得分:0
那么可以去看upx的代码,开源的
发表于:2007-06-21 16:50:475楼 得分:0
这一部分是看不到的
在链接库里!
发表于:2007-06-21 17:08:386楼 得分:0
翻译这个函数其实并不是很难,只是函数很大,翻译起来很耗费时间,那位兄弟有空帮lz翻译一下。我仔细琢磨了一下,象“1.00439e18”这样的目标地址,其实是偏移地址,去掉其中的前两个字符“1.”,后面的就是纯粹的偏移地址,这个地址对应着上面源程序中最前面一列。例如:  
00439e20       75   07             jnz   short   1.00439e29;跳转到了下面一条指令

00439e29     ^72   ed             jb   short   1.00439e18   ;跳转到了下面一行,其实就是函数的第一行

00439e18       8a06               mov   al,byte   ptr   ds:[esi]
发表于:2007-06-21 17:28:537楼 得分:0
我能看到这些,但是不会转换成c语言,因为有些指令不是很熟悉,比如jnz,jb等条件转移指令,不知道怎么写成c。比如:
      adc   ebx,ebx
      adc   eax,eax
      add   ebx,ebx
      jnb   short   1.00439e30     //怎么理解这句话,short怎么个跳法
      jnz   short   1.00439e4c

很多地方都用到了
adc   ebx,ebx
adc   eax,eax
怎么翻译啊?
发表于:2007-06-22 22:02:188楼 得分:0
换成c又怎么样。直接看汇编多好。
发表于:2007-06-22 22:06:289楼 得分:0
adc   ebx,ebx  
等价于:
ebx=ebx+ebx+cf;cf是进位标志
jnb   的意思是不小于0就跳转,根据前面指令的计算结果是否大于零,如果> =0,就跳转
short你不必去管它,它的意思是用一个字节的长度来存放jmp的偏移。意思就是向前或者向后只能跳转128字节的偏移。

发表于:2007-06-24 00:09:0210楼 得分:0
to:reverseengineering(★给我一杯壮阳水☆换我一夜不下垂★男人阳萎不是罪☆)

能看懂就不翻译了!

mengshijie_1981(云中雀):

cf的内容怎样知道呢?并且进位以后这个值起什么作用?
adc   ebx,ebx
adc   eax,eax
重复使用,意味着什么
单独一句指令我可以明白
但是连起来呢
完成一个什么动作?或者说是功能
发表于:2007-06-24 09:34:0911楼 得分:0
cf的内容怎样知道呢?
-------------------
通常在进行算术或逻辑运算时,cf标志位用来标记该运算是否产生进位/借位
发表于:2007-06-24 11:55:0412楼 得分:0
adc   ebx,ebx
adc   eax,eax
应该是64位数相加吧


快速检索

最新资讯
热门点击