能力值:
( LV3,RANK:30 )
|
-
-
2 楼
_asm
{
nop
..
省略 N 行
}
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
直接使用 “;”指令,并且在编译时关闭优化选项,也许可以。
另外,我在某本书上看到,好像是说以下语句也可以(好像是这样写,我记不清楚了)。
while(0)
{;}
但,无论是使用分号(“;”),还是使用一个不会执行的循环,是否会转化为nop,还是由具体的编译器决定的,应该没有通用的办法。
最好是在c中嵌入汇编来实现。
或者查查:#pragma 里有没有相应的用法。
我知道一个编译器可以通过这样定义来对其函数。
#pragma align(16)
但是,这个编译器是xp平台下的。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
写一段垃圾代码用OD自己NOP了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
找编译器手册...查内联汇编的相关支持...
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
这个我觉得最好用宏来定义,比如
#define NOP __asm__ __volatile__("nop")
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
谢谢楼上各位了!
提供了不少的思路。
请问内嵌之后再循环执行吗?
我想对其某段逻辑地址而已,因此需要通过调试来确定填充的nop指令次数。
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
应该能循环执行,因为有“__volatile__”修饰符,表示编译器不会对你写的代码进行优化,你写多少个就是多少个
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
C语言直接写空指令貌似不太可能,因为编译器会优化。内联汇编可行。
不过xdklzy写的内联汇编格式貌似是GCC的,VC的用__asm{}就可以
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
试了,可以。不过不能循环执行,写一个是一个,单独用分号不行。不知有没其它能执行循环填充的方法吗?因为需对齐逻辑地址,有时挺多的。
|
|
|