首页
社区
课程
招聘
[求助]为什么生成的代码之间用CC填充?
发表于: 2008-8-20 12:12 3625

[求助]为什么生成的代码之间用CC填充?

2008-8-20 12:12
3625
一个DLL有4个函数。Add() Sub() Mul() Div()



00971000 >/$  8B4424 08     MOV     EAX, DWORD PTR [ESP+8]
00971004  |.  8B4C24 04     MOV     ECX, DWORD PTR [ESP+4]
00971008  |.  03C1          ADD     EAX, ECX
0097100A  |.  A3 44339700   MOV     DWORD PTR [g_nResult], EAX
0097100F  \.  C2 0800       RETN    8
00971012      CC            INT3
00971013      CC            INT3
00971014      CC            INT3
00971015      CC            INT3
00971016      CC            INT3
00971017      CC            INT3
00971018      CC            INT3
00971019      CC            INT3
0097101A      CC            INT3
0097101B      CC            INT3
0097101C      CC            INT3
0097101D      CC            INT3
0097101E      CC            INT3
0097101F      CC            INT3
00971020 >/$  8B4424 04     MOV     EAX, DWORD PTR [ESP+4]
00971024  |.  2B4424 08     SUB     EAX, DWORD PTR [ESP+8]
00971028  |.  A3 44339700   MOV     DWORD PTR [g_nResult], EAX
0097102D  \.  C2 0800       RETN    8
00971030 >/$  8B4424 04     MOV     EAX, DWORD PTR [ESP+4]
00971034  |.  0FAF4424 08   IMUL    EAX, DWORD PTR [ESP+8]
00971039  |.  A3 44339700   MOV     DWORD PTR [g_nResult], EAX
0097103E  \.  C2 0800       RETN    8
00971041      CC            INT3
00971042      CC            INT3
00971043      CC            INT3
00971044      CC            INT3
00971045      CC            INT3
00971046      CC            INT3
00971047      CC            INT3
00971048      CC            INT3
00971049      CC            INT3
0097104A      CC            INT3
0097104B      CC            INT3
0097104C      CC            INT3
0097104D      CC            INT3
0097104E      CC            INT3
0097104F      CC            INT3
00971050 >/$  8B4424 04     MOV     EAX, DWORD PTR [ESP+4]
00971054  |.  99            CDQ
00971055  |.  F77C24 08     IDIV    DWORD PTR [ESP+8]
00971059  |.  A3 44339700   MOV     DWORD PTR [g_nResult], EAX
0097105E  \.  C3            RETN

为什么要在Add()和Mul()后填那么多CC呢?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
  • 1.JPG (10.08kb,103次下载)
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
如果我写编译器
我也会这么填充,用1字节的指令是为了反汇编的时候不至于变成一堆乱码。也方便编译器出错的时候,程序可以抛异常,更快定位错误

当然我是这么想,写的人未必是这么想
2008-8-20 12:26
0
雪    币: 191
活跃值: (95)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
使得函数起始地址是XXXXXXX0,这样貌似寻址什么会效率高一些
2008-8-20 12:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
帮你找了点参考资料,希望你能看懂。
*****************************************
单步中断(INT1)是由机器内部状态引起的一种中断,当系统标志寄存器的TF标志(单步跟踪标志)被置位时,就会自动产生一次单步中断,使得CPU能在执行一条指令后停下来,并显示各寄存器的内容。
断点中断(INT3)是一种软中断,软中断又称为自陷指令,当CPU执行到自陷指令时,就进入断点中断服务程序,由断点中断服务程序完成对断点处各寄存器内容的显示。
*****************************************
软中断指令 INT

格式: INT n 其中n为软中断的类型号.

功能: 本指令将产生一个软中断,把控制转向一个类型号为n的软中断,该中断处理程序入口地址在中断向量表的n*4地址
*****************************************
溢出中断指令 INTO(INTerrupt if Overflow)

格式: INTO

功能: 本指令检测OF标志位,当OF=1时,说明已发生溢出,立即产生一个中断类型4的中断,当OF=0时,本指令不起作用.
*****************************************
可以在程序出错的时候返回寄存器类的消息方便调试。
2008-8-20 17:03
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
我还经常看到用0x90填充的。
2008-8-20 17:28
0
雪    币: 191
活跃值: (95)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
怎样定义可以函数间不填充,以1字节对齐
2008-8-28 10:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我想因為他寫這個程式是用debug模式寫的,所以會把一些東東初使為int 3
2008-8-28 13:32
0
游客
登录 | 注册 方可回帖
返回
//