这是GNU的汇编
xorl    %eax, %eax(这句起什么作用)
按位异或,相同的位置为0,不同的位置为1,eax和eax的每一位都相同,所以相当于清零。
        movl    8(%ebp), %ecx
        testl   %ecx, %ecx(这句起什么作用)
    jle     .L3
8(%ebp)是第一个参数,检验它的值,若小于等于0则转

其它的,看看GNU汇编的语法吧。

在汇编代码中经常看到

[plain]  view plain copy
  1. xorl %edx, %edx

这个指令可以将寄存器 %edx 设置为 0,运用了对任意x,x^x = 0 这一属性。将寄存器 %edx 设置为 0 的更直接的方法是用指令 movl $0, %edx。使用 objdump 对比发现使用 xorl 的版本只需要 2 个字节,而是用 movl 的版本需要 5 个字节。

TEST 指令是进行与运算 不保留结果 
JL  指令是有符号当选条件转移指令  含义是小于/不大于(A>B) 转移   
其标志位 是SF≠OF AND ZF=0转移
sunshine  
      [第6楼]   [ 回复时间:2007-11-14 09:39 ]   [引用]   [回复]   [ top ]
荣誉值:106 
信誉值:0 
注册日期:2007-06-26 15:10
JL  指令是有符号当选条件转移指令  含义是小于/不大于转移    
其标志位 是SF≠OF AND ZF=0转移
nekaxi  
      [第7楼]   [ 回复时间:2007-11-14 18:39 ]   [引用]   [回复]   [ top ]
荣誉值:9 
信誉值:6 
注册日期:2007-10-10 08:31
test    ebx, ebx  
jl      short 0044ABC5 ----------->摘自反汇编代码,使用应该不会有错吧?

test    ebx, ebx一般用来判断EBX是否为0,所以上面的用法的确令人费解!!!!

cxn  
      [第8楼]   [ 回复时间:2007-11-14 22:33 ]   [引用]   [回复]   [ top ]
荣誉值:179 
信誉值:6 
注册日期:2007-07-09 19:18
这个是汇编的技巧,刚开始也很费解呵呵. 
TEST影响 C,O,P,Z,S  而JL根据 SF≠OF AND ZF=0跳转 
要想跳转至少ebx中的数不能为0 (为0了ZF就该为1了) 
而OF位没有溢出所以始终为0 所以只能是SF为 1 才跳转 
所以 条件满足SF=1 OF=0 ZF=0时也就是当ebx中的数为负数时才跳转. 
也就是如果ebx中的数为负跳到0044ABC5

同上指令还可以写为  
AND EBX,EBX 
JL SHORT 0044ABC5 
或 
OR EBX,EBX 
JL SHORT 0044ABC5 
这两条是不是更令人费解?

xorl %eax, %eax相关推荐

  1. xor eax,eax

    xor eax,eax 异或运算,操作数两数相反为1:两数相同为0.由于这两个数相同,异或后等于清0 要比mov eax,0效率高

  2. test dword ptr [eax],eax ; probe page.

    局部数组变量定义超过所分配的最大空间 ----------------------------------- Posts Tagged 变量 局部数组变量定义所分配的最大空间为多少?如何设置大小 有两 ...

  3. 关于sbb eax, eax以及sbb eax, 0FFFFFFFFh指令连用

    首先来看看sbb指令到底是用来干嘛的: sbb是带借位减法指令,它利用了CF位上记录的借位值. 指令格式:sbb 操作对象1, 操作对象2 功能:操作对象1=操作对象1 - 操作对象2 - CF 比如 ...

  4. TEST EAX,EAX作用

    test eax,eax je xxxxxxxx test指令的操作是将目的操作数和源操作数按位与,运算结果不送回目的操作数,然后根据结果设置SF,ZF,PF标志位,并将CF和OF标志位清零,一般下面 ...

  5. 关于test eax eax

    test eax eax 一般 if (a) {    a = 0; } else {    a++; } 会生成 TEST EAX, EAX JZ lb1    ;如果EAX为0则跳转到lb1 XO ...

  6. sub eax, _PAGESIZE; decrease by PAGESIZE test dword ptr [eax],eax ; probe page

    ; Find next lower page and probe cs20:sub eax, _PAGESIZE_ ; decrease by PAGESIZEtest dword ptr [eax] ...

  7. 关于 TEST EAX,EAX

    = 问题 =   在一些破解的文章中,会出现下面的情况 :00401098 50 push eax :00401099 8BCF mov ecx, edi :00401056 52 push edx ...

  8. 堆栈溢出问题 调试到位置(test dword ptr [eax],eax ; probe page.)

    今天在写一个柜外清程序的时候,碰到一个很怪异的问题,调试程序的位置为:test dword ptr [eax],eax ; probe page.编译时没有错误,但是debug时就会跳出此问题. 经过 ...

  9. test %eax %eax

    今天反汇编碰见了cmp test and几个指令作为跳转的条件有一些弄混了,所以来详细了解一下这几个指令的区别. 首先详细了解该指令的时候需要首先熟悉几个标志位,在and指令按位逻辑与两个操作数(ac ...

最新文章

  1. python调用c#注意事项_python 调用c# 超级直接示例
  2. Apiggs —— 非侵入性的 RestDoc 文档生成工具
  3. 新建angular-cli项目
  4. mysql 创建外键实例_mysql 外键创建实例
  5. spring @Value注解#和$区别
  6. 使用ETag识别ajax,如何使用jQuery AJAX请求访问ETag头?
  7. mysql for loop_MySQL循环语句 - Linux就该这么学的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. rhel5之光盘更新终结篇
  9. Winrunner与QTP
  10. 7-35 情人节 (15 分)
  11. linux awk搜索文本最后个字符串,[转载]linux下的文本处理命令sedawkgrep
  12. 一分钟教你学会配置eslint,还在为风格单双引号,对象末位逗号要不要,引用各种报错而烦恼?(建议收藏!详细中文注释)...
  13. Gradle之module间依赖版本同步
  14. Step by Step演示如何训练Pytorch版的EfficientDet
  15. hdu 4318 Power transmission 临接表 广搜 多校联合赛(二) 第九题
  16. Jenkins配置Android自动打包传蒲公英功能
  17. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(6)- Bootable image格式与加载(elftosb/.bd)...
  18. YARN中的任务队列调度器-公平调度器(Fair Scheduler)
  19. 论文阅读利器——划词翻译插件(桌面与浏览器)
  20. 前端参数无法转为后端实体内部类_javaweb实现自动将前端的属性值(HttpServletRequest)转化为后台对应的实体类...

热门文章

  1. 怎么领支付宝大红包?技术方面有这三大考量!
  2. Java基于Redis实现附近的人(内附源码)
  3. js获取图片像素颜色,修改图片像素颜色
  4. 【解耦Excel导出服务】开发日志
  5. caffe中各种loss函数
  6. 解决mysql 服务无法启动问题:Can't find messagefile 'D:\ ools\mysql-5.6.25-winx64\share\errmsg.sys'...
  7. Spring OAuth2 授权服务器配置详解
  8. matlab画爱心的代码
  9. 【转】25个开发性能优化
  10. 怎么把手机文件导入华为云服务器,华为手机如何上传数据到云服务器