作证解释两种情况下0x80000000 / -1输出异常不一致(利用反汇编调试)

代码段一:
int a = 0x80000000;
int b = a / -1;
printf("%d\n", b);
代码段二:
int a = 0x80000000;
int b = -1;
int c = a / b;
printf("%d\n", c);

觉得代码很简单,但当看到输出结果后就会有个大大的问号

  • 代码段一的输出结果
  • 代码段二的输出结果

    看到这儿,了解一些汇编知识的童鞋应该会看出点端倪

在C/C++,Java中,整型常量可用十进制、八进制或十六进制形式表示
—以1~9开头的数为十进制数
—以0开头的数为八进制数
—以0x开头的数为十六进制数

第一段:

代码段中定义的整形a=0x80000000实际上是个十六进制数。
其二进制表示为
1000 0000 0000 0000 0000 0000 0000 0000
在机器中是以补码形式存在的,所以开头的“1”是符号位。
根据补码转化成原码可以算出是-2147483648。
这个数恰好是整形的最小值(-2147483648~2147483647)。
对原操作数取neg(求补)理应为2147483648,溢出,系统自动自动将其看作补码形式存在即
1111 1111 1111 1111 1111 1111 1111 1111
所以输出为-2147483648。

第二段:

a/b机器用带符号除法指令(IDIV)实现,但是不生成OF标志。
实际上是“浮点异常”(“Floating point exception”)
Linux 中 对 #DE 类型发 SIGFPE 信号。
所以第二段没有输出 IDIV TMin/ 1= TMax +1发生溢出,程序中断。

以上仅为个人理解,有错望指正,谢谢。

利用反汇编调试与补码解释0x80000000 / -1整形输出异常不一致相关推荐

  1. 利用反汇编手段解析C语言函数

    利用反汇编手段解析C语言函数 通过在 Visual C++6.0 下反汇编一个 32 位 C语言程序的部分代码来解析解释函数调用的具体过程. 函数调用过程 函数调用过程主要由参数传递.地址跳转.局部变 ...

  2. c语言反汇编过程,利用反汇编手段解析C语言函数

    [[技匠志]利用反汇编手段解析C语言函数]https://toutiao.com/group/6792908403560677900/?app=explore_article&timestam ...

  3. 变频器怎么设置_如何利用串口调试软件与变频器通信?

     西门子博途的全套视频教程下载!  西门子S7-1500内部培训PPT下载! 每一个做工控的都必须要会利用串口调试软件来和我们的外围设备来做通讯测试.今天我们就来学习怎么用串口调试软件控制台达的这款变 ...

  4. 利用浏览器调试功能 计算 百度网盘 文件数量 V2

    最近需要统计百度网盘里文件的数量,百度网盘又没有提供这样的功能,因此之前自己写了段脚本进行查验,见<利用浏览器调试功能 计算 百度网盘>.之后发现每个目录最多文件数只有1000,因此研究了 ...

  5. 利用IAR调试Mini2440

    利用IAR调试Mini2440 收藏 利用IAR 调试mini2440,准备先玩玩裸奔 以前开发Lpc2214的时候用的是IAR调试环境 感觉还是很不错的 当时一度错怪的了这开发环境 因为Lpc对Jt ...

  6. xcode反汇编调试iOS模拟器程序

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow http://bl ...

  7. 利用vscode调试vue代码

    利用vscode调试代码,实测非常好用 注意:现在只支持vue2.x. 1.配置launch.json {// 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述.// 欲 ...

  8. 利用Debug调试代码解决0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突

    VS2019利用Debug调试代码解决0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突 之前一直是使用release发布代码模式进行程序编译,前天突然出现这个问题 ...

  9. 反汇编调试之分析OOPS

    反汇编调试之分析OOPShttps://mp.weixin.qq.com/s?__biz=Mzg3NDkwMjc2NA==&mid=2247483761&idx=1&sn=cd ...

最新文章

  1. ios--用证书进行真机调试(转)
  2. python中string.digits_python学习笔记五:字符串方法
  3. emui与华为鸿蒙关系,华为王成录谈鸿蒙和EMUI的关系
  4. 使用opencv和python进行智能图像处理_使用OpenCV在Python中进行图像处理
  5. 企业级IM应该帮助员工提高绩效,避免无关的信息干扰
  6. TCP协议之如何保证传输的可靠性
  7. oracle触发和存储过程,Oracle存储过程与触发器
  8. 秋高气爽FreeEIM
  9. python自动测试方法_python接口自动化测试二十一:类和方法
  10. Linux Shell 内建命令 : fg , bg , jobs 命令详解
  11. 【技能】快递管家无需开发集成金蝶云星辰示例
  12. 系统发育树的美化~Figtree(图文教程)
  13. intel无线网卡linux驱动安装,Ubuntu应用---安装 Intel Wireless-AC 9462 无线网卡驱动(无法连接wifi,完美解决)...
  14. 2021年化工自动化控制仪表考试题库及化工自动化控制仪表报名考试
  15. 在百度地图中叠加CAD图及GIS数据展示踩坑记
  16. apache端口转发 端口映射
  17. 带宽、吞吐量与线速的关系(转载)
  18. 基于MATLAB程序设计的计算器(中)
  19. Threejs系列--11游戏开发--沙漠赛车游戏【初步加载地面】
  20. 这篇3万字的Java后端面试总结,面试官看了瑟瑟发抖(汇总)

热门文章

  1. docker下安装jupyterHub
  2. 救灾军人最感人的瞬间
  3. windows10下Qt环境OpenCV配置【CMake环境】
  4. 多任务学习(Multi-task)keras实现
  5. 用Java语言进行简单的求1-100之间的求偶和,并把求和结果在控制台输出
  6. C语言编程歌咏比赛,斗志昂扬展风采 团结奋进谱新篇 ——记七年级c部队列队形歌咏比赛...
  7. java中多态到底是什么_java中的多态是指什么
  8. configure:13646: error: possibly undefined macro: AC_MSG_ERROR
  9. 注册表-各种功能-隐藏IE、隐藏硬盘、禁用硬件
  10. Graphics on Linux