如何在gdb中调用汇编?

2024-03-12

在 gdb 中我可以使用call运行函数,但是如果我想运行一些额外的程序集怎么办?


Prior to GCC 5 (1), I don't know of a way to run arbitrary machine code unless you actually enter the machine code into memory and then run it.

如果你想运行代码already在内存中,您可以将指令指针设置为开始,在结束处设置断点,然后继续。然后,在断点之后,将指令指针更改回其原始值。

但我实际上看不到这个的用例。这并不意味着那里isn't第一,任何你能通过运行代码做的事情,你也可以通过直接修改寄存器、标志、内存等来实现。

例如,命令:

info registers

将转储寄存器的当前值,同时:

set $eax = 42

将改变eax注册到42.

您还可以通过以下方式更改内存:

set *((char*)0xb7ffeca0) = 4

这会将单个字节写入内存位置0xb7ffeca0您还可以使用相同的方法来存储更广泛的数据类型。


(1) GCC 5 allows you to compile and execute arbitrary code with the compile code command, as documented here https://sourceware.org/gdb/onlinedocs/gdb/Compiling-and-Injecting-Code.html.

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

如何在gdb中调用汇编? 的相关文章

  • 汇编器8086将32位数字除以16位数字

    我尝试将 32 位数字除以 16 位数字 例如 10000000h 除以 2000h 根据我尝试做的设计除以 右 4 位数字除以除数 然后左 4 位数字除以除数 这是我的代码 DATA num dd 10000000h divisor dw
  • Grub 和进入实模式(低级汇编语言编程)

    我一直在开发一个玩具操作系统 并一直使用 grub 作为我的引导加载程序 最近尝试使用 VGA 时 我发现无法使用硬件中断 我发现这是因为我被 grub 置于保护模式 有人知道如何在不删除 grub 的情况下回到实模式吗 如果您使用 GRU
  • 无法识别的仿真模式:MinGW32 上的 elf_i386

    我正在尝试制作内核 但无法链接C与程序集一起输出 这ld 我收到错误 无法识别的仿真模式 elf i386 我正在使用 Windows 10 专业版以及 MinGW32 和 MSYS 我正在使用的代码 link ld link ld OUT
  • 将字段中的位扩展到掩码中所有(重叠+相邻)集位的最快方法?

    假设我有 2 个名为 IN 和 MASK 的二进制输入 实际字段大小可能是 32 到 256 位 具体取决于用于完成任务的指令集 每次调用时两个输入都会改变 Inputs IN 1100010010010100 MASK 000111101
  • Intel:序列化指令和分支预测

    英特尔架构开发人员手册 http www intel com content www us en architecture and technology 64 ia 32 architectures software developer v
  • gdb 脚本:在选定的断点处执行命令

    我想在 gdb 脚本中预定义一些断点 并在这些断点处调用一些特殊命令 然后自动继续程序执行 因此 理想情况下 我想要一个如下所示的 gdb 脚本 b someFunction if breakpoint from above reached
  • 无法在 64 位 Linux 上从汇编 (yasm) 代码调用 C 标准库函数

    我有一个函数foo以汇编语言编写 并在 Linux Ubuntu 64 位上使用 yasm 和 GCC 编译 它只是使用以下命令将消息打印到标准输出puts 如下所示 bits 64 extern puts global foo secti
  • ICC 中的 -O3 会扰乱内在函数,使用 -O1 或 -O2 或相应的手动汇编即可

    这是后续这个问题 http stackoverflow com questions 49791664 o2 in icc messes up assembler fine with o1 in icc and all optimizatio
  • 如何在 MacOS 上使用 nasm 进行编译

    我正在尝试在汇编器上编译并链接我的第一个程序 我尝试编译以下代码 include stud io inc global main section text main xor eax eax again PRINT Hello PUTCHAR
  • 比“add esp, 4”更小的指令

    又是我 我的程序中有很多 add esp 4 我正在尝试减小它的大小 是否有任何更小的指令可以替代 add esp 4 pop edx 或者您不介意破坏的任何其他整数寄存器 这就是现代编译器实际上所做的 https stackoverflo
  • 将 XMM 寄存器压入堆栈

    有没有办法将打包双字整数从 XMM 寄存器推送到堆栈 然后在需要时将其弹出 理想情况下 我正在寻找通用寄存器的 PUSH 或 POP 之类的东西 我已经检查了英特尔手册 但我要么错过了命令 要么没有 或者我是否必须将值解压到通用寄存器然后推
  • x86 程序集 Pushl/popl 不适用于“错误:后缀或操作数无效”

    我是汇编编程的新手 正在努力解决编程基础 http savannah nongnu org projects pgubook 在带有 GNU 汇编器 v2 20 1 的 Ubuntu x86 64 桌面上 我已经能够汇编 链接执行我的代码
  • 如何让 UIAutomation、模拟器和 Xcode 调试器同时运行?

    谁能向我指出有关如何使 Instruments 运行 UIAutomation 脚本并使用在模拟器中运行的调试器启动 iPhone 应用程序的文档 限制条件 我只有 iPhone 3g 硬件来测试和调试 而 UIAutomation 无法可
  • 将以下机器语言代码(0x2237FFF1)翻译成MIPS汇编

    到目前为止我已经翻译了这段代码 但我不明白的是如何计算 计算 16 位立即地址的数量 0x2237FFF1 转为二进制 0010 0010 0011 0111 1111 1111 1111 0001 现在我正在读取操作码 001000 并知
  • INT 13h 无法读取超出特定扇区的数据

    我正在为我的操作系统编写内核 在将磁盘扇区加载到内存时遇到问题 以下是从磁盘加载扇区的函数代码部分 mov ax 0x3000 mov es ax mov ax 0x0201 mov bx word ptr bp 6 bx 0x000 0x
  • 为什么 GCC 在堆栈上压入额外的返回地址?

    我目前正在学习汇编的基础知识 在查看 GCC 6 1 1 生成的指令时遇到了一些奇怪的情况 这是来源 include
  • 多线程调试器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 GDB 在使用多线程 pthreads 进行调试时存在严重问题 nix 上还有其他好的 C C 多线程调
  • 优化算术编码器

    我正在优化名为的 C 库的编码步骤PackJPG http www elektronik htw aalen de packjpg 我使用 Intel VTune 对代码进行了分析 发现当前的瓶颈是 PackJPG 使用的算术编码器中的以下
  • ARM 汇编:从 STDIN 获取字符串

    我目前正在学习 CS 课程 我们刚刚开始在 Raspberry Pi 上使用 ARM Assembly 事实证明这相当困难 想知道是否有人可以提供帮助 我当前的任务是从 stdin 获取一个字符串 使用 scanf 并计算其中的字符数 然后
  • 内联执行生成的汇编程序

    我正在阅读以下演示文稿 http wingolog org pub qc 2012 js slides pdf http wingolog org pub qc 2012 js slides pdf其中讨论了 4 10 19 内联 ASM

随机推荐

  • Linux 上 UDP 和 TCP 的内核绕过 - 它涉及什么?

    Per http www solacesystems com blog kernel bypass revving up linux networking http www solacesystems com blog kernel byp
  • 将 docx 转换为 Rmarkdown

    我的工作流程涉及生成包含数据分析的 Microsoft Word 报告 使用 Rmarkdown 然后使用 Word 的标注注释功能对这些报告进行审查和注释 对 Word 文档中的注释进行编辑会更容易 所以这就是我所做的 我现在想将这些更改
  • NHibernate更新参考

    Entities 我们有一个名为 Product 的实体 它是使用 NHibernate 加载的 产品有一个 NHibernate 很乐意为我填充的类别 Database 在数据库中 Product 有一个类别的外键 Scenario 用户
  • Kibana:在表格可视化中连接两个文档

    我有一个数据表可视化 显示具有电子邮件地址和 ID 的文档中的字段 timestamp email field id Feb 5th email protected cdn cgi l email protection xyz123 这些字
  • WPF负载控制问题

    我正在 WPF 中做一些事情 我有一个ComboBox与许多Types 选择具体类型后 我希望能够加载特定的用户控件 有许多文本框等 尊重我的 WPF 窗口上定义区域的类型 怎么做 有没有类似的东西LoadControl 并将其加载到Pla
  • 如何使用 iText 添加 PAdES-LTV

    我正在尝试在没有 LTV 格式的已签名 PDF 文档中启用 LTV 我在链接中描述的所有情况下都找到了相同的示例如何为时间戳签名启用 LTV https developers itextpdf com question how enable
  • Hibernate删除一条记录,但该记录并没有消失?

    编辑 哎呀 我想如果我发布删除代码会有帮助 对不起 delete from permanent store and local list int index get record to delete if entityList getEnt
  • 找不到与 net.tcp 方案匹配的基地址

    我已将文件传输服务从 basicHttpBinding 移至 netTcpBinding 因为我正在尝试设置双工模式通道 我也开始了我的net tcp 端口共享服务 我目前正在开发中 并且在 xp 盒子上自行托管 直到我们移动 应用程序到开
  • 使用 Brave 浏览器的 Puppeteer?

    我想知道是否可以使用 Brave 浏览器而不是基本版本的 chromium 来执行 puppeteer 脚本 我知道 Brave 是从 chromium 开发的 因此您可以使用 Brave 启动 selenium 脚本 但您知道 puppe
  • 查找数组中两个最相似的值 (Java)

    我有一个整数数组 我想找到两个最相似的值 差异最小 例子 如果数组中的值是80 100 500 600 501 505 两个最相似的值是500 and 501 我怎样才能做到这一点 这似乎是个小任务 我们可以这样解决这个问题 1 应用任何有
  • tomcat在关闭之前是否等待应用程序线程完成?

    当我们使用 shutdown sh 脚本关闭 tomcat 时 它是等待应用程序线程完成还是杀死它们并关闭 tomcat Tomcat 尝试终止应用程序线程 但如果失败 则日志中可能会显示如下错误消息 严重 Web 应用程序似乎已启动一个线
  • WordPress:在子主题中覆盖父主题类功能

    我想重写子主题中的函数 该函数在父主题的类中定义 这是示例代码 class A extends B function construct this gt add ajax sync post data need to override ot
  • Git Clone:权限被拒绝(公钥)。致命:无法从远程存储库读取

    我正在使用 bitbucket 并尝试使用以下命令克隆存储库 sudo git clone email protected cdn cgi l email protection KassaK mbf git 我收到此错误 Permissio
  • 在gwt中添加外部js

    我在 GWT 中编写并检查了我的 js 代码 为了检查 我在 projectName html 文件中添加了我的 js 代码并且它有效 但是当我尝试添加外部 js 文件时 出现错误 WARN 404 GET
  • 调整图像大小时添加细白线

    当我们调整图像大小时 下载之后并将其存储到文档目录之前 通过以下代码 UIImage resizeImage UIImage image withSize CGSize newSize float actualHeight image si
  • 删除bash中每行的最后一个单词

    我正在尝试浏览一个文件 并删除每行中的最后一个单词 目前 我正在使用命令 sed s n old txt gt new txt 但结果显示 old txt 与 new txt 相同 感谢您的帮助 如果我能澄清这个问题 请告诉我 另外 为了定
  • 使用 JXL 将图像插入 Excel 文件而不拉伸它

    我可以使用 jxl 将图像插入到我的 excel 文件中sheet addImage WritableImage obj 我的问题是 它根据以下参数进行延伸WritableImage 我想知道是否有一种方法可以使我插入的图像不会像插入 20
  • SendGrid SMTP API:嵌入图像:错误请求

    我正在使用 sendgrid SMTP APIhttps github com sendgrid sendgrid csharp https github com sendgrid sendgrid csharp发送电子邮件 但我不知道如何
  • 在Python中,为什么负数的偶次方仍然是负数? [复制]

    这个问题在这里已经有答案了 在Python中 gt gt gt i 3 gt gt gt i 4 81 Why is i 4不评价为 i 4 但作为 i 4 我想有人可能会争辩说 求幂优先于 隐式 乘法i减一 即你应该阅读 1 i 4 但我
  • 如何在gdb中调用汇编?

    在 gdb 中我可以使用call运行函数 但是如果我想运行一些额外的程序集怎么办 Prior to GCC 5 1 I don t know of a way to run arbitrary machine code unless you