windows系统-汇编语言与机器码的关系

2023-05-16

接下来就让我们进入到本章的前半部分。在前面章节中已经多次提到,计算机CPU能直接解释运行的只有本地代码(机器语言)程序。用C语言等编写的源代码,需要通过各自的编译器编译后,转换成本地代码。

通过调查本地代码的内容,可以了解程序最终是以何种形式来运行的。但是,如果直接打开本地代码来看的话,只能看到数值的罗列。如果直接使用这些数值来编写程序的话,还真是不太容易理解。因而就产生了这样一种想法,那就是在各本地代码中,附带上表示其功能的英语单词缩写。例如,在加法运算的本地代码中加上add(addition的缩写)、在比较运算的本地代码中加上cmp(compare的缩写)等。这些缩写称为助记符,使用助记符的编程语言称为汇编语言。这样,通过查看汇编语言编写的源代码,就可以了解程序的本质了。因为这和查看本地代码的源代码,是同一级别的。

不过,即使是用汇编语言编写的源代码,最终也必须要转换成本地代码才能运行。负责转换工作的程序称为汇编器,转换这一处理本身称为汇编。在将源代码转换成本地代码这个功能方面,汇编器和编译器是同样的。

用汇编语言编写的源代码,和本地代码是一一对应的。因而,本地代码也可以反过来转换成汇编语言的源代码。持有该功能的逆变换程序称为反汇编程序,逆变换这一处理本身称为反汇编(图10-1)。

图10-1 汇编语言的源代码和本地代码是一一对应的

哪怕是用C语言编写的源代码,编译后也会转换成特定CPU用的本地代码。而将其反汇编的话,就可以得到汇编语言的源代码,并对其内容进行调查。不过,本地代码变换成C语言源代码的反编译,则要比反汇编困难。这是因为,C语言的源代码同本地代码不是一一对应的,因此完全还原到原始的源代码是不太可能的①。

Ps:①通过解析可执行文件得到源代码的方式称为“反汇编”或“反编译”,也称为“反向工程”。市场上销售的软件程序等,有时会在其使用说明书中明确表明禁止反汇编及反编译。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows系统-汇编语言与机器码的关系 的相关文章

  • Windows 上的 ruby​​ 中出现 SSL 错误

    我收到以下错误 C Users user Desktop folder gt ruby exchange rate rb C Ruby23 x64 lib ruby 2 3 0 net http rb 933 in connect nonb
  • 使用 XAMPP 在 Windows 10 中安装 go-pear.phar 时出错

    我在尝试安装时总是遇到错误go pear phar 这是点击后的错误Enter对这个问题1 13 all or Enter to continue 1 13 all or Enter to continue ERROR Please ent
  • 如何在 Windows 路径中使用卷标?

    我想使用批处理文件从可移动驱动器复制文件 无论它获得的驱动器号是什么 到目前为止 还没有去 似乎没有任何现成的命令或第三方命令行工具可以处理基于卷标签的路径 我尝试了 FreeFileSync 但它可以大批量工作 并且我在这里需要精确的文件
  • 调用 close() 后大文件没有立即刷新到磁盘?

    我正在使用 python 脚本创建大文件 超过1GB 实际上有 8 个 在创建它们之后 我必须创建将使用这些文件的进程 该脚本如下所示 This is more complex function but it basically does
  • C++ 控制台键盘事件

    有什么方法可以获取 Windows 控制台中的关键事件吗 我需要一种无需 GUI 即可快速获取 keydown 和 keyup 事件的方法 我尝试过使用 getch 但它没有获取按键并等待按下某个键才返回 Use ReadConsoleIn
  • Windows Defender 检测 Python EXE 为木马

    我制作了一个 Python 脚本 将 Windows 目录以 zip 形式邮寄给我 我使用 sched 模块添加了一个调度程序 每小时重复一次 我试图制作一个简单的同步应用程序供个人使用 在 Windows 启动时启动 我使用将其转换为 e
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 有适用于 Windows 的 Bonjour SDK 吗?

    我想知道如何在 Windows 上实现 bonjour 以便我可以在 Windows 上设置服务器并使用 iphone 客户端 中的 bonjour 服务访问 Windows 服务器 中的文件 谁能告诉我我们是否有适用于 Windows 的
  • phoenix 框架 - 新套接字处的参数无效 - windows

    我无法运行新的 Phoenix 应用程序 这是我收到的错误 我不确定原因是什么 我尝试更改端口 但这并没有改变行为 另外 我似乎能够正确运行节点 Compiled web views error view ex Compiled web c
  • 如何在 Windows 中安装“posix”

    我正在 Windows 7 中使用 WAMP 服务器并尝试使用posixphp 中的函数 但它不起作用并且给出fatal error undefined function 现在我想知道如何在 Windows 上安装它 如果它不适用于 Win
  • Win32: BitTest, BitTestAndComplement, ... <- 如何禁用这个垃圾?

    在 VS2008 SP1 安装中 WinNT h 包含以下几行 define BitTest bittest define BitTestAndComplement bittestandcomplement define BitTestAn
  • 在用户提示“手动关闭”之前,WiX 在卸载时调用应用程序

    我有一个安装程序 它安装一个应用程序并在安装完成后立即启动该应用程序 这对我来说很有效 但现在我想在卸载应用程序时停止该应用程序 我不希望提示用户手动关闭应用程序 这将全自动工作 我需要使用自定义操作来执行此操作 WM CLOSE 消息在我
  • 如何从不同的进程关闭窗口

    我有一个 C 应用程序 我想指示它从不同的进程中很好地关闭 我还希望能够要求它打开主窗口 我有一个对其主窗口句柄的引用 我知道我可以使用远程处理或 WCF 等复杂的方案来做到这一点 问题是我可以使用更简单的机制 例如窗口消息 或 c 应用程
  • 当c的控制台使用c或c++运行时禁用键盘按键

    我想在程序运行时禁用键盘 这意味着没有人可以使用 alt F4 等 我如何在 Windows 操作系统中使用 c 使其成为可能 Handle WM SYSKEYUP WM SYSKEYDOWN并返回0 这是处理这些消息的 WndProc L
  • .NET 4.0 是否与 Windows XP SP2 或更低版本兼容? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读过这里http www microsoft com downloads en details aspx FamilyID 5765
  • 如何从 Windows 反编译 Linux 二进制文件?

    如何从 Windows 反编译 Linux 二进制文件 so 谢谢 你可以试试回旋镖 http boomerang sourceforge net 您需要首先从源代码构建它 因为提供的二进制文件不涵盖这种情况 如果您绝对拒绝编译任何内容 请
  • argc 和 argv 在 Windows 中没有用吗?

    在 Linux 中 argc 和 argv 计算终端中的参数 但在 Windows 中 我找不到放置第二个参数的地方 事实上 每次我运行该程序时 它都会创建那个丑陋的黑色窗口 我什至没有机会给出任何争论 那么这两个变量在Windows平台下
  • 通过单个命令行操作确定操作系统

    介绍 我有一个 神奇 工具 如果我提供 IP 它可以在机器上执行命令行操作 该工具知道机器正在使用的操作系统 并根据是否是windows linux在cmd shell上执行命令 并盲目返回命令的输出 C gt 工具 exe 172 140
  • Winapi:获取具有特定文件句柄的进程

    目前我有一个带有文件过滤器驱动程序的软件 在软件安装过程中 驱动程序以以下方式作为服务启动 CreateService serviceManager name displayName SERVICE START DELETE SERVICE
  • windows 10 ruby​​2.5 Rails 5.1.5 无法加载此类文件 -- sqlite3/sqlite3_native (LoadError)

    环境 窗口 10 ruby 2 5 Rails 5 1 5 问题 无法加载这样的文件 sqlite3 sqlite3 native LoadError 我已经尝试过 gem uninstall sqlite3 和 gem install s

随机推荐

  • C# 中IntPtr 与 string,数组互转

    一 IntPtr 与 string互转 string str 61 34 aa 34 IntPtr init 61 Marshal StringToHGlobalAnsi str string ss 61 Marshal PtrToStri
  • C#中使用SendMessage进行进程通信,可发送字符串,结构体(不能发送类类型)。

    发送时只能以结构体形式发送 xff0c 类的话会提示 指定结构必须能直接复制到本机结构中 xff0c 或是具有布局信息 的错误提示 以下两种结构体示例都可以被发送 public struct A public A int a name 61
  • c#windows消息循环sendmessage实例

    DllImport 34 User32 dll 34 EntryPoint 61 34 SendMessage 34 private static extern int SendMessage IntPtr hWnd 信息发往的窗口的句柄
  • mysql 8.0.19 winx64安装及修改初始密码

    本文为大家分享了mysql 8 0 19 winx64安装教程 xff0c 供大家参考 xff0c 具体内容如下 1 下载mysql 8 0 19 winx64 1 1 进入地址 xff1a https dev mysql com down
  • ARM映像文件

    ARM映像文件 ARM中的各种源文件 xff08 包括汇编文件 xff0c C语言程序及C 43 43 程序等 xff09 经过ARM编译器编译后生成ELF xff08 Executable and linking format xff09
  • mysql安装问题汇总

    注意 xff0c xff08 1 xff09 首次安装mysql时自动生成密码后必须再手动改密码 xff0c 否则会提示修改密码 xff08 2 xff09 注意cmd命令里的字符格式 xff08 3 xff09 修改密码有些情况下不能设置
  • mysql数据库迁移到另一台电脑上

    解决办法 mysql要转换到另一台机器上面 xff0c 最重要的要考虑以下几个问题 1 数据库使用什么存储引擎 xff0c 如果是myisam的话 xff0c 可以把data目录复制移走 但如果是innodb的话 xff0c 千万不要用这种
  • winform的UI设计关键属性汇总

    1 将控件的坐标转换成屏幕的坐标 br KeyBoard StartPosition 61 FormStartPosition Manual br Point showPoint 61 ActiveTBox PointToScreen ne
  • winform中UI设计分辨率问题

    1 UI设计可以自适应或固定分辨率 xff0c 自适应需要手动写调整控件尺寸位置代码 xff1b 固定分辨率需要固定尺寸的UI资源图片 xff08 如背景图片 xff09 和固定的终端分辨率 xff08 如pc端不一致需调整分辨率为初始设计
  • C#中改变进度条(progressbar)的颜色

    改变系统自带进度条的方法就是重绘了 具体方法如下 xff1a 1 自定义控件继承自ProgressBar xff0c 如下 xff1a public class CustomProgressBar ProgressBar public Cu
  • c#中设计器中窗体释放  protected override void Dispose(bool disposing)改写解决部分窗体线程释放不彻底问题

    c 中设计器中窗体释放 protected override void Dispose bool disposing 改写解决部分窗体线程释放不彻底问题 lt summary gt 清理所有正在使用的资源 lt summary gt lt
  • 每个Form类都实现了IWin32Window接口!

    每个Form类都实现了IWin32Window接口 xff01 Form Show IWin32Window 在From1的cs文件中实例化Form2 myForm2 Show this 就可以弹出非模态的窗体 而且form2是Form1的
  • c#winform控件过多卡顿问题解决方案

    近期在项目中遇到了登录以及切换界面时 xff0c 界面不停闪烁的问题 xff0c 经过查阅发现以下方法可以成功解决该问题 将下面代码添加到窗体代码中即可 xff1a protected override CreateParams Creat
  • 子类继承父类后调用virtual函数问题(base.函数名)

    void Main SonB s 61 new SonB s Show 先调用子类的函数 xff0c 再调用基类的函数 xff08 在子类方法中base Show xff09 xff0c 一共messageBox show 了两次 publ
  • MVVM简介与运用

    前言 在介绍MVVM框架之前 xff0c 先给大家简单介绍一下MVC MVP框架 xff08 由于本博文主要讲解MVVM xff0c 所以MVC和MVP将简化介绍 xff0c 如果需要我将在以后的博文中补充进来 xff09 MVC框架 xf
  • 基于Tensorflow 三层神经网络拟合二次函数(附代码与解析)

    文章目录 前言一 隐藏层函数二 生成二次函数与损失函数 1 二次函数与画图2 损失函数三 训练数据总结 前言 刚入手深度学习 xff0c 结合这几天看的视频与内容 xff0c 将其整合成文章 提示 xff1a 以下是本篇文章正文内容 xff
  • C#中如何获取鼠标及控件的位置坐标(相对于屏幕)

    0 xff1a Control PointToScreen xff1a 将指定工作区点的位置计算成屏幕坐标 1 xff1a Control MousePosition 鼠标相对于屏左上角的坐标 xff1b 2 xff1a this Poin
  • windows系统-汇编语言的语法是“操作码+操作数”

    在汇编语言中 xff0c 1行表示对CPU的一个指令 汇编语言指令的语法结构是操作码 43 操作数 xfffc xff08 也存在只有操作码没有操作数的指令 xff09 操作码表示的是指令动作 xff0c 操作数表示的是指令对象 操作码和操
  • windows系统-程序编译过程

    系统调用和高级编程语言的移植性 操作系统的硬件控制功能 xff0c 通常是通过一些小的函数集合体的形式来提供的 这些函数及调用函数的行为统称为系统调用 xff08 system call xff09 xff0c 也就是应用对操作系统 xff
  • windows系统-汇编语言与机器码的关系

    接下来就让我们进入到本章的前半部分 在前面章节中已经多次提到 xff0c 计算机CPU能直接解释运行的只有本地代码 xff08 机器语言 xff09 程序 用C语言等编写的源代码 xff0c 需要通过各自的编译器编译后 xff0c 转换成本