双世宠妃13 16百度云 百度云

1335人阅读
C 语言中的迷失(43)
安全相关(24)
/*********************************************************************
&* Author& : Samson
&* Date&&& : 08/03/2014
&* Test platform:
&*&&&&&&&&&&&&& Linux ubuntu 3.2.0-58-generic-pae
&*&&&&&&&&&&&&& GNU bash, version 4.2.39
&* *******************************************************************/
计算机科学中,NOP或NOOP(No Operation或No Operation Performed的缩写,意为无操作)是汇编语言的一个指令,一系列编程语句,或网络传输协议中的表示不做任何有效操作的命令。
NOP是用执行一条具有操作数,具有相同效果的指令;
NOP指令通常用于控制时序的目的,强制内存对齐,防止流水线灾难,占据分支指令延迟),或是作为占位符以供程序的改善(或替代被移除的指令)。
C语言中最简单的NOP块被称为空语句;其只包括一个分号。
但是至于是否是把这样的一个分号在编译的时候编译为NOP指令,则是需要确定编译器是如何进行编译的,有可能对此句进行了优化,不一定就是完全能够对上号的;
NOP通常在破解软件时有特殊用途,例如检查序列号,特定硬件或软件需求,加密狗等的软件。这是通过更改函数和/或子程序以跳过安全检查,直接返回期望的检测值实现的。由于大多数安全检查子程序中的指令会被废弃,它们会被NOP所代替。即是使用NOP指令将进行检查的原来的代码给替换掉。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:620531次
积分:8846
积分:8846
排名:第1623名
原创:272篇
转载:27篇
评论:59条
(1)(2)(6)(6)(6)(2)(3)(6)(7)(5)(4)(6)(5)(4)(4)(5)(14)(4)(6)(8)(13)(4)(7)(19)(11)(2)(7)(2)(4)(1)(4)(7)(5)(6)(14)(5)(6)(5)(3)(3)(4)(2)(2)(3)(1)(11)(1)(4)(1)(4)(21)(5)(1)(6)(5)NOP指令有何作用
NOP指令有何作用
一个nop为1个指令周期,主要用于精确定时或者延时nop指令的作用:1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu 就可以从第四个字节处读取指令了。)2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;--&具体应该说是占用了3个时钟脉冲! 3)i/o传输时,也会用一下 nop,等待缓冲区清空,总线恢复; 4)清除由上一个算术逻辑指令设置的flag位; 5)破解:)对于原程序中验证部分使用nop来填充,使验证失效; 6)有一个朋友说的比较厉害--在航天飞机控制程序中防止程序跳飞! 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/erazy0/archive//6071281.aspx
略懂社热议
略懂社热议
等待您来回答
编程领域专家
&SOGOU - 京ICP证050897号12929人阅读
【Language】ASM(5)
nop指令的作用:
1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu&就可以从第四个字节处读取指令了。)
2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;--&具体应该说是占用了3个时钟脉冲!
3)i/o传输时,也会用一下&nop,等待缓冲区清空,总线恢复;&
4)清除由上一个算术逻辑指令设置的flag位;&
5)破解:)对于原程序中验证部分使用nop来填充,使验证失效;&
6)有一个朋友说的比较厉害--在航天飞机控制程序中防止程序跳飞!&
解释如下:在空间放射性环境下,放射性子粒很容易使内存位元改变(呵呵,有点基因突变的感觉),这样如果改变的是jump,call指令的存贮位置的话,就会导致程序跳转到一个不可以预置的位置,对于关键系统来说的确是灾难性的。所以就在被调用程序之前填充nop指令,这样即使跳转到稍前或者稍后的位置,也不会造成影响。&
这让我想起《C&Traps&and&Pitfalls》中举的那个导弹软件中的致命错误:因为导弹是以0.1s为单位进行记时的,但是由于浮点数没有办法精确的表示0.1,造成了舍尾误差,这个误差在导弹开启3天的之后逐渐的积累,结果误差了一秒。
计算机科学中,NOP或NOOP(No&Operation或No&Operation&Performed的缩写,意为无操作)是汇编语言的一个指令,一系列编程语句,或网络传输协议中的表示不做任何有效操作的命令。
1.&NOP机器指令
2.&NOP代码
3.&NOP协议命令
5.&安全问题
7.&参考文献
1.&NOP机器指令
有的计算机指令集包含一条指令,其主要目的是不改变任何程序可访问的寄存器,处理器状态标志或主存,而且可能需要特定的时钟周期来执行。在其它指令集中,NOP是用执行一条具有操作数,具有相同效果的指令来模拟的(例如SPARC处理器推荐使用sethi&0,&%g0模拟NOP)。
NOP指令通常用于控制时序的目的,强制内存对齐,防止流水线灾难(en:Hazard&(computer&architecture)),占据分支指令造成的延迟(delay&slot),或是作为占位符以供程序的改善(或替代被移除的指令)。在某些情况中,NOP指令会产生副作用;例如在摩托罗拉&68000处理器中,NOP操作码会产生流水线同步。
下表显示了部分CPU架构上NOP指令的特征:
Intelx86系列CPU
1;&i686中为1-9
0x90;&0x0f&0x1f&[2]
x86&CPU上的NOP指令实质上是XCHG&EAX,&EAX(操作码同为0x90)--无任何作用的指令。
Intel&8051&/MCS-51系列
MOS科技&65xx
65C02处理器发布时,之前多数的无效指令都被定义成了具有不同字长和需时的NOP指令。
0x&(ori&r0,r0,0的扩展操作码)
2.&NOP代码
NOP有时可以描述函数或一系列编程语句的作用,若部分没有作用(也可以称为冗余代码)。常见的编译器优化的作用就包括检测和去除这样的代码。
下面是一个起NOP作用的C语言语句的例子(评判标准在于语句是否影响程序输出,而非编译器是否为语句产生代码):&&source&lang=&C&&
&/source&&(该语句执行了一个加法,但结果被丢弃。)
C语言中最简单的NOP块被称为空语句;其只包括一个分号。(标准没有要求编译器在这个例子中生成NOP指令;通常这个语句会直接为编译器所忽略。)&&source&lang=&C&&
虽然空语句自身没有用处,但在某些情况下可以启动占位符的作用,例如在循环中:&&source&lang=&C&&
while&(ReadChar()&!=&'/n')&;
以上代码一直调用ReadChar函数,直到函数返回一个/n(NL,新行)字符。
Python中的pass语句不会产生作用,可以作为NOP使用。它的主要目的是保证语法正确,由于Python的缩进敏感语法。
3.&NOP协议命令
许多协议,比如telnet,包含NOP指令,该指令允许客户端可以在不会引起其它操作的情况下向服务器请求回应。NOP指令可以用于检测连接是否断开,或服务器是否可以响应操作。下列协议中包含NOOP指令(不完全列表):
·&BitTorrent
注意:与其它协议不同,IMAP4的NOP命令允许客户端响应服务器发送由其它客户端反应的操作信息。
虽然大多数telnet和FTP服务器用OK或+OK回应NOOP指令,有的程序员在对客户端的回应中加入了特别的内容。例如MINIX的ftpd守护进程会以以下消息回应NOOP:[3]
[[FTP服务器返回值列表|200]]&NOOP&to&you&too!
NOP通常在破解软件时有特殊用途,例如检查序列号,特定硬件或软件需求,加密狗等的软件。这是通过更改函数和/或子程序以跳过安全检查,直接返回期望的检测值实现的。由于大多数安全检查子程序中的指令会被废弃,它们会被NOP所代替。
5.&安全问题
NOP操作码可以被用于组成一个NOP&slide,允许在指令指针值未定义时执行代码,例如缓存溢出导致栈上的函数返回地址被更改。
·&计算机系统结构
·&恒等函数,函数式编程语言中NOOP的等效函数
·&xyzzy,一个有时用来代替NOOP的命令
7.&参考文献
1&^&Motorola&68000&Programmer's&Reference&Manual.
2&^&Intel&Architecture&Software&Developer's&Manual,&Volume&2:&Instruction&Set&Reference&Manual&[].
16进制机器码&&&x86汇编指令&&&指令意义&&&可能影响的寄存器或标志位&
--------------&&&-------------&&&-------------------&&&---------------------------&
06&&&PUSHL&&&%es&&&es进栈&&&esp&
0E&&&PUSHL&&&%cs&&&cs进栈&&&esp&
16&&&PUSHL&&&%ss&&&ss进栈&&&esp&
1E&&&PUSHL&&&%ds&&&ds进栈&&&esp&
27&&&DAA&&&加法小数位调整&&&AF&&&CF&&&PF&&&SF&&&ZF&&&AL&
2F&&&DAS&&&减法小数位调整&&&AF&&&CF&&&PF&&&SF&&&ZF&&&AL&
37&&&AAA&&&加法的ASCII调整&&&AF&&&CF&&&AL&
3F&&&AAS&&&减法小数位调整&&&AF&&&CF&&&AL&
40&&&INC&&&%eax&&&%eax加1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&eax&
41&&&INC&&&%ecx&&&%ecx加1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&ecx&
42&&&INC&&&%edx&&&%edx加1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&edx&&&
43&&&INC&&&%ebx&&&%ebx加1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&ebx&
44&&&INC&&&%esp&&&%esp加1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&esp&
45&&&INC&&&%ebp&&&%ebp加1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&ebp&
46&&&INC&&&%esi&&&%esi加1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&esi&
47&&&INC&&&%edi&&&%edi加1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&edi&
48&&&DEC&&&%eax&&&%eax减1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&eax&
49&&&DEC&&&%ecx&&&%ecx减1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&ecx&
4A&&&DEC&&&%edx&&&%edx减1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&edx&
4B&&&DEC&&&%ebx&&&%ebx减1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&ebx&
4C&&&DEC&&&%esp&&&%esp减1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&esp&
4D&&&DEC&&&%ebp&&&%ebp减1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&ebp&
4E&&&DEC&&&%esi&&&%esi减1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&esi&
4F&&&DEC&&&%edi&&&%edi减1&&&AF&&&OF&&&PF&&&SF&&&ZF&&&edi&
50&&&PUSHL&&&%eax&&&eax进栈&&&esp&
51&&&PUSHL&&&%ecx&&&ecx进栈&&&esp&
52&&&PUSHL&&&%edx&&&edx进栈&&&esp&
53&&&PUSHL&&&%ebx&&&ebx进栈&&&esp&
54&&&PUSHL&&&%esp&&&esp进栈&&&esp&
55&&&PUSHL&&&%ebp&&&ebp进栈&&&esp&
56&&&PUSHL&&&%esi&&&esi进栈&&&esp&
57&&&PUSHL&&&%edi&&&edi进栈&&&esp&
90&&&NOP&&&(NULL)&&&(NULL)&
91&&&XCHG&&&%ecx,%eax&&&交换寄存器内容&&&eax,ecx&
92&&&XCHG&&&%edx,%eax&&&交换寄存器内容&&&edx,eax&
93&&&XCHG&&&%ebx,%eax&&&交换寄存器内容&&&ebx,eax&
95&&&XCHG&&&%ebp,%eax&&&交换寄存器内容&&&ebp,eax&
96&&&XCHG&&&%esi,%eax&&&交换寄存器内容&&&esi,eax&
97&&&XCHG&&&%edi,%eax&&&交换寄存器内容&&&edi,eax&
98&&&CBW&&&将byte的AL转换成word的EAX&&&EAX&
9B&&&WAIT&&&等待CPU处理完数据&&&(NULL)&
D6&&&无效指令&&&(NULL)&&&(NULL)&
F5&&&CMC&&&转换CF标志位(开关)&&&CF&
F8&&&CLC&&&清CF位(CF=0)&&&CF&
F9&&&STC&&&设置CF位(CF=1)&&&CF&
FC&&&CLD&&&设置DF位(DF=1)&&&DF&
FD&&&STD&&&清理DF位(DF=0)&&&DF&
1.&&&上面利用XCHG/PUSHL/INC/DEC的方法程序应该不会出错,&可以正常到目的,&&&但寄存器内容被改变了.inc&&eax就改变了eax的值,&只能算无奈的办法.&
2.&&&利用改变标志寄存器位是个不错的想法,&&&基本上不会影响流程,&&&但看到还是改变了CPU的东西还是不满意.&
3.&&&/x90(NOP),/x9b(wait),/xd6(bad)&&&这三个指令不错,&&&都不会改变程序的流程,&&&又不会改变寄存器的东东.&
这里尤其指明的是/xd6指令,&&&在intel手册上没查到对应什么指令,&&&但在linux下和windows下发现系统对于这个是继续&
执行下一条指令,和NOP相似.&
在我看来,上面这些指令利用顺序优先级最好是:&
/x90(NOP)&&&&&&&/xd6&&&&&&&/x9b&&&&&&&改变标志寄存器的操作指令&&&&&&&INC/DEC/PUSHL/XCHG&
还有/question/
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:206926次
积分:2443
积分:2443
排名:第11917名
原创:24篇
转载:46篇
评论:19条
~~~~~~~~~~~~~~~~~~~~~~~~~~~ QQ
~~~~~~~~~~~~~~~~~~~~~~~~~~~
(1)(1)(1)(4)(1)(2)(11)(2)(3)(2)(3)(6)(4)(2)(3)(7)(1)(1)(2)21ic官方微信-->
后使用快捷导航没有帐号?
查看: 9406|回复: 14
STM32有没有nop指令
&&已结帖(10)
主题帖子积分
高级技术员, 积分 814, 距离下一级还需 186 积分
高级技术员, 积分 814, 距离下一级还需 186 积分
主题帖子积分
专家等级:结帖率:97%
主题帖子积分
高级技术员, 积分 814, 距离下一级还需 186 积分
高级技术员, 积分 814, 距离下一级还需 186 积分
打断点用,有当然更好,查了头文件,没发现有
满意回复+10
呵呵,我记得以前的书上说了 arm 用 mov R0,R0 作为 nop 指令.
主题帖子积分
---------------------
主题帖子积分
---------------------
专家等级:结帖率:98%打赏:0.00受赏:40.00
主题帖子积分
---------------------
呵呵,我记得以前的书上说了 arm 用 mov R0,R0 作为 nop 指令.
欢迎进入 !
主题帖子积分
资深技术员, 积分 446, 距离下一级还需 54 积分
资深技术员, 积分 446, 距离下一级还需 54 积分
主题帖子积分
专家等级:结帖率:62%
主题帖子积分
资深技术员, 积分 446, 距离下一级还需 54 积分
资深技术员, 积分 446, 距离下一级还需 54 积分
可以自己写个空语句,AIR已经给了,你再宏定义一下就好了
主题帖子积分
高级技术员, 积分 711, 距离下一级还需 289 积分
高级技术员, 积分 711, 距离下一级还需 289 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 711, 距离下一级还需 289 积分
高级技术员, 积分 711, 距离下一级还需 289 积分
呵呵, Cortex-M3有nop指令的。
asm( & nop & );
KEIL的就自己去找找看。
主题帖子积分
主题帖子积分
专家等级:结帖率:35%打赏:0.00受赏:9.00
主题帖子积分
呵呵,我记得以前的书上说了 arm 用 mov R0,R0 作为 nop 指令.
airwill 发表于
哈哈,书上没说也没有关系,mov R1, R1; mov R2, R2 等等都可以作为 nop 指令。
I do not teach, but I coach. I do not feed, but I seed.
欢迎访问我的博客:/BLOG_OWNER_199055.HTM
主题帖子积分
助理工程师, 积分 1650, 距离下一级还需 350 积分
助理工程师, 积分 1650, 距离下一级还需 350 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1650, 距离下一级还需 350 积分
助理工程师, 积分 1650, 距离下一级还需 350 积分
这个必须有。。
主题帖子积分
高级技术员, 积分 647, 距离下一级还需 353 积分
高级技术员, 积分 647, 距离下一级还需 353 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 647, 距离下一级还需 353 积分
高级技术员, 积分 647, 距离下一级还需 353 积分
我也想问这问题,在哪可以找到啊?具体占多长时间啊?
主题帖子积分
助理工程师, 积分 1650, 距离下一级还需 350 积分
助理工程师, 积分 1650, 距离下一级还需 350 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1650, 距离下一级还需 350 积分
助理工程师, 积分 1650, 距离下一级还需 350 积分
楼上,我都给了
占一个指令周期。。
主题帖子积分
初级技术员, 积分 75, 距离下一级还需 25 积分
初级技术员, 积分 75, 距离下一级还需 25 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 75, 距离下一级还需 25 积分
初级技术员, 积分 75, 距离下一级还需 25 积分
ARM的汇编器当然有NOP指令,只不过NOP是一条伪指令,会被编译成如 MOV R0, R0之类的指令
主题帖子积分
主题帖子积分
专家等级:结帖率:98%打赏:0.00受赏:2.00
主题帖子积分
哈哈,书上没说也没有关系,mov R1, R1; mov R2, R2 等等都可以作为 nop 指令。
香水城 发表于
LZ啊,什么东西都是可以变通的,看这mov R1, R1;不就挺好用的么
说的好听点 我万事略懂。其实我什么都不会。
主题帖子积分
中级工程师, 积分 3512, 距离下一级还需 1488 积分
中级工程师, 积分 3512, 距离下一级还需 1488 积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
中级工程师, 积分 3512, 距离下一级还需 1488 积分
中级工程师, 积分 3512, 距离下一级还需 1488 积分
主题帖子积分
技术达人, 积分 9594, 距离下一级还需 406 积分
技术达人, 积分 9594, 距离下一级还需 406 积分
主题帖子积分
专家等级:结帖率:5%
主题帖子积分
技术达人, 积分 9594, 距离下一级还需 406 积分
技术达人, 积分 9594, 距离下一级还需 406 积分
很多指令都可以作为 nop 指令用
主题帖子积分
高级工程师, 积分 7076, 距离下一级还需 924 积分
高级工程师, 积分 7076, 距离下一级还需 924 积分
主题帖子积分
专家等级:结帖率:23%
主题帖子积分
高级工程师, 积分 7076, 距离下一级还需 924 积分
高级工程师, 积分 7076, 距离下一级还需 924 积分
mov R1, R1; mov R2, R2 等这些指令作为nop 指令挺好用的
主题帖子积分
高级技术员, 积分 506, 距离下一级还需 494 积分
高级技术员, 积分 506, 距离下一级还需 494 积分
主题帖子积分
专家等级:结帖率:55%
主题帖子积分
高级技术员, 积分 506, 距离下一级还需 494 积分
高级技术员, 积分 506, 距离下一级还需 494 积分
注意是两条下划线“_”+&_&+nop(); == __nop();
主题帖子积分
助理工程师, 积分 1478, 距离下一级还需 522 积分
助理工程师, 积分 1478, 距离下一级还需 522 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
助理工程师, 积分 1478, 距离下一级还需 522 积分
助理工程师, 积分 1478, 距离下一级还需 522 积分
无意义的操作,都可作NOP。
甘甜之泉水
发帖类勋章
时间类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
涓涓之细流
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
时间类勋章
湍急之河流
发帖类勋章
社区建设奖章
等级类勋章
技术高手奖章
人才类勋章
核心会员奖章
等级类勋章
欢快之小溪
发帖类勋章
时间类勋章
突出贡献奖章
等级类勋章
技术新星奖章
人才类勋章
时间类勋章

我要回帖

更多关于 双世宠妃百度云资源 的文章

 

随机推荐