首页
社区
课程
招聘
[求助]如何写C代码,反汇编是为空指令
发表于: 2010-6-22 19:50 7817

[求助]如何写C代码,反汇编是为空指令

2010-6-22 19:50
7817
本人做实验,需要通过填充一序列的空指令,来对其两个程序的逻辑地址,请问各位网友:

如何空指令nop对应的C代码是什么呢?我是在linux实现的,利用gdb的info和disass命令获取逻辑地址的,谢谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
_asm
{
  nop
  ..
  省略 N 行
}
2010-6-22 20:12
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
直接使用 “;”指令,并且在编译时关闭优化选项,也许可以。

另外,我在某本书上看到,好像是说以下语句也可以(好像是这样写,我记不清楚了)。
while(0)
{;}

但,无论是使用分号(“;”),还是使用一个不会执行的循环,是否会转化为nop,还是由具体的编译器决定的,应该没有通用的办法。

最好是在c中嵌入汇编来实现。

或者查查:#pragma   里有没有相应的用法。
我知道一个编译器可以通过这样定义来对其函数。
#pragma align(16)
但是,这个编译器是xp平台下的。。。
2010-6-22 20:41
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
写一段垃圾代码用OD自己NOP了
2010-6-23 05:28
0
雪    币: 53
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
找编译器手册...查内联汇编的相关支持...
2010-6-23 11:17
0
雪    币: 208
活跃值: (148)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
这个我觉得最好用宏来定义,比如
#define NOP __asm__ __volatile__("nop")
2010-6-23 16:54
0
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢楼上各位了!
提供了不少的思路。

请问内嵌之后再循环执行吗?
我想对其某段逻辑地址而已,因此需要通过调试来确定填充的nop指令次数。
2010-6-23 20:21
0
雪    币: 208
活跃值: (148)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
应该能循环执行,因为有“__volatile__”修饰符,表示编译器不会对你写的代码进行优化,你写多少个就是多少个
2010-6-24 10:52
0
雪    币: 104
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
C语言直接写空指令貌似不太可能,因为编译器会优化。内联汇编可行。
不过xdklzy写的内联汇编格式貌似是GCC的,VC的用__asm{}就可以
2010-6-28 01:16
0
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
试了,可以。不过不能循环执行,写一个是一个,单独用分号不行。不知有没其它能执行循环填充的方法吗?因为需对齐逻辑地址,有时挺多的。
2010-6-29 14:28
0
游客
登录 | 注册 方可回帖
返回
//