NASM 生成的列表文件中操作码中的括号有何含义?

2023-12-14

当查看 NASM 生成的列表文件时,我发现存在三种操作码:

  1. 不带括号。
  2. 带圆括号。
  3. 带方括号。

他们的意思是什么?它们分别在什么时候被使用?

这是一个列表文件的示例,演示了上述所有内容:

 1                                  section .text
 2                                      extern printf
 3                                      extern fgets
 4 00000000 313233                  str3:   db "123"
 5                                  main:
 6 00000003 68[00000000]                push    str1
 7 00000008 68[09000000]                push    str2
 8 0000000D 68[00000000]                push    str3
 9 00000012 E8(00000000)                call    func1
10 00000017 E8(04000000)                call    func2
11 0000001C E80B000000                  call    func3
12 00000021 E8(00000000)                call    printf
13 00000026 E8(00000000)                call    fgets
14 0000002B C3                          ret
15                                  
16 0000002C 90                      func3:  nop
17 0000002D C3                          ret
18                                  
19                                  
20                                  section .text1
21 00000000 90                      func1:  nop
22 00000001 90                          nop
23 00000002 90                          nop
24 00000003 C3                          ret
25                                  
26 00000004 90                      func2:  nop
27 00000005 90                          nop
28 00000006 90                          nop
29 00000007 C3                          ret
30                                  
31                                  
32                                  section .data
33                                  
34 00000000 313233343536373839      str1:   db "123456789"
35 00000009 313233343536373839      str2:   db "123456789"

它们显示了链接时将应用重定位的位置。

[nnnnnnnn]显示绝对重定位(当链接器执行重定位时,某些节的基址将被添加到偏移量中)。例如一旦二进制文件完全链接,这些字节push str2指令将被更改为包含基地址.data + 0x09.

(nnnnnnnn)显示 PC 相对重定位(用于调用和分支,其中最终值必须相对于下一条指令的地址)。例如中的字节call func2指令将根据最终地址之间的差异进行更新func2,以及以下指令的地址(call func3).

没有括号call func3指令本身,因为在这种情况下不需要重定位 -call指令需要相对地址,但是func3在同一节内,因此相对地址是已知的(以下指令位于.text + 0x21, and func3 is at .text + 0x2c,所以相对地址为0xb无论最终地址如何.text).

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

NASM 生成的列表文件中操作码中的括号有何含义? 的相关文章

  • 在什么类型的情况下汇编速度不够快,因此您需要直接的硬件/布尔逻辑解决方案?

    我已经开始通读装配艺术 https nostarch com assembly2 htm 其中有一个关于布尔逻辑的部分 其中指出 当然 使用 Pascal C 甚至汇编语言等语言指定编程问题的解决方案比使用布尔方程指定解决方案要容易得多 因
  • 不知道如何一次打印整个日历[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 cseg segment assume cs cseg ds cseg org 100H begin mov es cs video mov
  • MIPS 在程序中使用 $s0... 等注册并最终恢复它是否优雅

    我在 MIPS 教程中读到 只有寄存器 s0 s7 在过程调用中被保留 但我认为 也许我错了 创建有副作用的程序并不优雅 我认为程序应该只更改 v0 v1 寄存器和堆栈 如果需要的话 我是对的吗 所以我认为在我的程序中我只能使用 t0 t9
  • 用于读/写 XMM 和 YMM 寄存器的内联汇编代码?

    我有 2 个变量来模拟 X86 XMM 和 YMM 如下所示 uint64 t xmm value 2 uint64 t ymm value 4 现在我想使用内联汇编来读取和写入 XMM YMM 寄存器 如何编写GCC内联汇编来复制xmm
  • 大端和小端表示

    如果我写以下内容 section data align 4 X db 1 Y dw 5 Z db 0x11 section text add dword X 0xAA000101 我试图理解大端和小端表示之间的差异 但我不明白每个表示的每个
  • NOP 雪橇如何工作?

    我找不到回答这个问题的好来源 我知道 nop sled 是一种用于规避缓冲区溢出攻击中堆栈随机化的技术 但我无法理解它是如何工作的 有什么简单的例子可以说明这种方法 128 字节 nop sled 等术语是什么意思 有些攻击包括使程序跳转到
  • 在 DLL 中,函数表的结构如何?

    我一直在研究不明确支持我的操作系统的设备库的实现 特别是 我有一个反汇编的 DLL 以及大量的支持源代码 现在 功能表 导出表是如何构造的 我的理解是 第一个结构 data部分是 RVA 表 接下来是通过索引链接到第一个地址表的字符串表 这
  • 在 NASM 中使用 istruc 时:“警告:尝试初始化 BSS 部分‘.bss’中的内存:忽略 [-w+other]”

    在搜索这个错误时我发现this https stackoverflow com questions 65731514 nasm attempt to initialize memory in bss section 77001709问题 但
  • 在长模式下更改 GDT 并更新 CS

    我正在编写一个简单的自制 64 位操作系统 通过 UEFI 启动它 这意味着当我的代码开始执行时 它已经处于长模式 并且启用了分页 现在 退出 UEFI 引导服务后 我想用我自己的控制结构替换 UEFI 构建的所有控制结构 成功更改 CR3
  • 如何在汇编程序中使用 C 库?

    我想知道如何用汇编语言编写文本编辑器 但现代操作系统需要 C 库 特别是对于它们的窗口系统 我找到了这个page http pengu1n is programmer com posts 8304 html 这对我有很大帮助 但我想知道是否
  • 现代 x86 硬件不能将单个字节存储到内存中吗?

    说到 C 的并发内存模型 Stroustrup 的C 编程语言 第 4 版 第 1 节 41 2 1 说 就像大多数现代硬件一样 机器无法加载或存储小于单词的任何内容 然而 我的 x86 处理器已经有几年的历史了 它可以并且确实存储小于单词
  • g++ 内联汇编括号中不匹配

    g 向我抱怨以下代码中缺少括号 1 2 3 v v v asm volatile inb 1 0 a result Nd portnumber 1 2 3 正如您所看到的 括号是匹配
  • 编写 AMD64 SysV 程序集时使用哪些寄存器作为临时寄存器?

    我正在使用实现一个功能cpuid根据 AMD64 SysV ABI 进行组装 我需要在函数本身中使用 2 个临时寄存器 第一个用于累积返回值 第二个用作计数器 我的功能目前如下所示 zero argument function some c
  • AVX512 掩码寄存器(k1...k7)的 GNU C 内联 asm 输入约束?

    AVX512 为其算术命令引入了 opmask 功能 一个简单的例子 上帝螺栓 org https godbolt org z P7xWD8 include
  • 这段汇编语言代码是什么意思?

    我是一名学生 刚刚开始学习汇编语言 为了更好地理解它 我只是用 C 写了一个简短的代码并将其转换为汇编语言 奇怪的是我有点听不懂 代码是 include
  • 什么时候汇编比C更快? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的
  • 取消的分支与常规分支有何不同?

    特别是对于 SPARC Assembly 取消的分支与常规分支有何不同 我一直认为 当我需要填充分支指令的 nop 延迟槽时 需要取消分支指令 但是 我认为我在这一部分上是不正确的 因为您可以在不取消分支的情况下填充 nop 如果不采用分支
  • 为什么 Visual Studio 使用 xchg ax,ax

    我正在查看程序的反汇编 因为它崩溃了 并注意到很多 xchg ax ax 我用谷歌搜索了一下 发现它本质上是一个 nop 但是为什么 Visual Studio 会执行 xchg 而不是 noop 该应用程序是一个C NET3 5 64位应
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代
  • 从汇编程序获取命令行参数

    通读 专业汇编语言书籍 似乎它提供了用于读取命令行参数的错误代码 我纠正了一点 现在它从段错误变成了读取参数计数 然后是段错误 这是完整的代码 data output1 asciz There are d params n output2

随机推荐

  • 在 R 中将大向量分割成区间[重复]

    这个问题在这里已经有答案了 我对 R 不太擅长 我运行了这个循环 得到了一个包含 11 303 044 行的巨大结果向量 我有另一个由维度为 1681 行的循环产生的向量 我希望运行一个chisq test来比较它们的分布 但由于它们的长度
  • jQuery UI 可拖动/可排序/可放置在达到可放置限制时禁用放置

    JS Bin 演示 Task 我正在使用 jQuery UI 创建事件调度程序 事件有一定的长度 以分钟为单位 并且可以将它们拖到不同的日期 每个日期都有自己的最大长度 以分钟为单位 在示例中 每天的最大长度为 480 分钟 并且不应允许插
  • Electron 带有节点通知程序显示 Windows 10 通知

    我正在尝试制作一个简单的应用程序 单击按钮时应显示通知 问题是通知没有显示 但 console logs 正在显示 通知应该在开发模式下工作吗 意思是只是运行electron 而且我不必构建和安装该应用程序 Windows操作系统 版本 W
  • 如何增加 FOR 循环语句中的 FOR 循环值?

    我想知道如何增加 FOR 循环语句中的值 这是我的代码 function Check var MemoryData Array of byte MemorySignature Array of byte Position integer b
  • 拟合多峰分布

    假设我们有两个正态分布的线性组合 我认为人们会将结果称为多模态分布 import numpy as np import matplotlib pyplot as plt from scipy stats import norm ls np
  • 查询中的 Linq Convert.ToInt32

    我有一些代码 from AspNetUsers in db AspNetUsers join UserDetails in db UserDetails on new Id Convert ToInt32 AspNetUsers UserD
  • Python 多处理:进程无法启动

    我是新来的multiprocessing在Python 2 7 中 我尝试运行以下代码 from time import sleep from multiprocessing import Process import multiproce
  • 返回 Haskell 中字符串的第一行

    我有一个相当简单的问题 但我很困惑 基本上 我只需要编写一个函数 它接受一个字符串 将其分成几行 接受第一行并以格式正确的 HTML 标题标记返回第一行 老实说 我只是不知道从哪里开始 任何事情都会有所帮助 我确实有代码 但这只是我用来对输
  • JDK 7的支持终止如何影响Android开发

    Oracle 已宣布他们停止了 JRE 7 的官方更新并且JDK 7 据我所知 Google没有说任何关于JDK 8的信息 我猜Android开发的推荐版本是JDK 7 Android 开发是否正式支持 JDK 8 谷歌Android开发p
  • Visual Studio 2010 中的异步、等待

    我在VS2010和VS2012中运行了下面的代码 但VS2012只返回响应 然后我搜索发现 需要在VS2010中启用async和await 然后通过使用 AsyncCtpLibrary dll 引用 我启用了它 但vs2010仍然没有返回响
  • Python输入错误

    我在 Mac OSX 10 9 5m 上运行 python 2 7 10 但它不起作用 这是代码 YourName py name input What is your name n print Hi name 这是错误 Python 2
  • Uglify 破坏了 npm run build,日志报告没有说明任何特别的内容,npm run dev 可以工作

    这是 npm run build 产生的错误消息 ERROR in build js from UglifyJs Unexpected token punc src App vue 40 0 build js 139 6 npm ERR c
  • 跨线程事件信号(Obj-C)的同步/等待设计?

    在 Cocoa 应用程序中 我有这样的设置 主线程 M 可以向某个后台 生产者 线程 B 提交请求以完成某些工作 例如项目 X 的 计算结果 此后不久 另一个后台线程 C 可能需要计算项 X 的结果 并且需要同步这些结果 线程 C 本身可以
  • Json 无法与 HttpPost 一起使用,可能围绕 setEntity

    我正在使用此代码将其发送到我的 php 文件 该文件看起来像这样 file put contents dump txt POST n print r POST true n n n GET n print r GET true 我像这样发送
  • 当表单有一些数据数组时,JQuery如何仅提交更改的字段

    我有一个具有一对多关系的数据库结构 在html表单中 有类似的输入 名称为 item 或 file 使数据成为数组
  • 如何在 iOS6 上调整 MKAnnotationView 的大小?

    调整 MKAnnotationView 图像大小 地图何时放大和缩小 该方法在iOS5上成功 但在iOS 6上失败 我直接更改 MKAnnotationView 的变换 但没有成功 MKAnnotationView仅在瞬间调整大小 当在MK
  • Pyspark:使用 DataFrame 的最后一次观察进行前向填充

    使用 Spark 1 5 1 我一直在尝试转发填充空值与最后已知的观察一栏我的数据框 可以从空值开始 对于这种情况 我将用第一个已知的观察值向后填充该空值 但是 如果这使代码过于复杂 则可以跳过这一点 In this post Scala
  • 启动自定义隐式意图

    安装的两个活动分别在设备上具有以下清单文件 第一个应用程序的活动在其清单中具有 在哪里 package com example tictactoe
  • 将数组与对象相加

    我有以下包含对象的数组 我想总结所有出现的情况watt let allProducts unique id 102 currency price 529 99 watt 150 unique id 11 currency price 323
  • NASM 生成的列表文件中操作码中的括号有何含义?

    当查看 NASM 生成的列表文件时 我发现存在三种操作码 不带括号 带圆括号 带方括号 他们的意思是什么 它们分别在什么时候被使用 这是一个列表文件的示例 演示了上述所有内容 1 section text 2 extern printf 3