首页
社区
课程
招聘
[求助]关于反汇编指令的问题!
发表于: 2008-11-7 16:21 5739

[求助]关于反汇编指令的问题!

2008-11-7 16:21
5739
利用反汇编引擎Disasm,想把PE文件代码段的代码反汇编出来,对汇编指令做一些处理。
以notepad.exe为例,通过PE头找到虚拟地址0x001000和代码段虚拟大小0x7800,从内存中读出代码反汇编得到:
out dx,eax 实际操作码为:EF
outsd         实际操作码为:6F
。。。。。。。
而用OD看:
EF6FDA77      dd      ADVAPI32.RegQueryValueExW
好像代码段开始并不是指令。这是怎么回事呢?

另:我用的OD的反汇编引擎Disasm好像功能太简单了,忘记是从哪位大牛的博客上下的,编译成的lib文件,添加进工程就可以用。看雪上下的代码级复用用于版本问题太多。
下面是lib文件的Disasm.h的内容:
typedef struct{
       
        // Define Decoded instruction struct

    char Assembly[256]; // Menemonics
    char Remarks[256];  // Menemonic addons
    char Opcode[30];    // Opcode Byte forms
    DWORD Address;      // Current address of decoded instruction
    BYTE  OpcodeSize;   // Opcode Size
        BYTE  PrefixSize;   // Size of all prefixes used

} DISASSEMBLY;

void Decode(DISASSEMBLY *Disasm,char *Opcode,DWORD *Index);

只有一个函数,而且DISASSEMBLY结构过于简单了,下一步对指令进行处理好像很麻烦。请各位提点意见,谢谢啦!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
你用的是 16bit 的
2008-11-7 16:44
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
您能说的详细些吗?十分感谢!
刚又发现问题,还是notepad.exe的例子,寻找CALL指令,用Disasm反汇编,将E8 XXXX都找出来,其中XXXX是地址。但是当CALL后面是寄存器时(代码为FF XXXX),没有找到该CALL指令。
这个结果是与OD相对比得出的。
2008-11-7 17:02
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
去OD主页下载OD的那个反汇编试一下,用起来也很简单的。而且源代码还有如何使用的例子。
2008-11-7 18:25
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢icersg的建议,我试过直接代码级复用,但是由于源代码版本较老,产生一大堆问题,才想出偷懒的办法,拿别人编译好的用的。
我在VS2005下编译,问题太多。用过的朋友是否能给点建议。
2008-11-8 11:03
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
在VS2005下运行官网上的Disasm,好不容易编译通过,又碰到莫名其妙的问题。
main.c中:
          // ADD [475AE0],1 MASM mode, lowercase, don't show default segment
          ideal=0; lowercase=1; putdefseg=0;
          l=Disasm("\x81\x05\xE0\x5A\x47\x00\x01\x00\x00\x00",
                10,0x400000,&da,DISASM_CODE);
          printf("%3i  %-24s  %-24s   (MASM)\n",l,da.dump,da.result);
运行到disasm()函数,弹对话框报错:
0xcccccccc 处最可能的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
这是怎么回事呢?请各位指点下,十分感谢!
2008-11-8 21:11
0
游客
登录 | 注册 方可回帖
返回
//