汇编中的内存复制

2024-01-28

首先,使用NASM,目标是x86,并在x86的16位实模式下运行。 我想将一个内存位置的代码复制到另一个内存位置,然后对目的地进行调用/跳转,这样我就可以在那里执行代码。代码最初位于 0x1000:0x0(段:偏移量)。现在,我想将其复制到 0x3000:0x0。代码的大小正好是 512 字节。我正在尝试按照以下常规来做到这一点。

org 0x500

;The code to be copied is located at 0x1000:0x0. We want to copy it to 0x3000:0x0

copy:

  mov esi,0x1000  ; source address of the code in DS:SI
  mov edi,0x3000  ; destination address of the code in ES:DI
  mov ecx,0x200   ; size of the code, 512 bytes (0x200)
  rep movsb       ; copy bytes from address in SI to address in DI.

  jmp 0x3000:0x0  ; jump to the destination , and execute the code there.

被复制的代码仅打印一个字符串。因此,如果上面的代码片段有效,我会在屏幕上看到该字符串。另外,我已经验证复制的代码正在工作,并且它确实存在于 0x1000:0x0,所以没有犯这样明显/愚蠢的错误。 由于某种原因,上述例程失败了。在我看来,可能的故障点可能是给出的地址错误。我不确定在复制之前在 SI 和 DI 中放入什么。这些应该是偏移量还是实际地址?文档没有明确说明这一点。另外,我应该显式初始化 ES 和 DS 吗?

我尝试了各种组合来尝试使这项工作成功,但没有成功。其中之一是这样的:

org 0x500

;The code to be copied is located at 0x1000:0x0. We want to copy it to 0x3000:0x0

copy:
  mov bx,0x1000
  mov ds,bx       ; set DS explicitly to 0x1000.
  mov esi,0x0     ; source address of the code in DS:SI (0x1000:0x0)
  mov bx,0x3000
  mov es,bx       ; set ES explicitly to 0x3000
  mov edi,0x0     ; destination address of the code in ES:DI (0x3000:0x0)
  mov ecx,0x200   ; size of the code, 512 bytes (0x200)
  rep movsb       ; copy bytes from address in SI to address in DI.

  jmp 0x3000:0x0  ; jump to the destination , and execute the code there.

所以这里我明确设置了ES:DI和DS:SI。这也行不通。我还尝试将实际物理地址提供给 SI 和 DI,但失败了。现在,我别无选择。我确信这里犯了一些概念性的内存寻址错误,但我无法发现它。 (是的,复制的代码大小为 512 字节,原始二进制文件)。

Thanks.


您是否确保您复制的代码与位置无关,或者在地址 0x3000 而不是 0x1000 处正确?一些指令(如 CALL 和长 JMP)是绝对的,其他指令(如短 JMP)是相对于指令的地址。

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

汇编中的内存复制 的相关文章

随机推荐

  • Android - 更改操作栏标题文本颜色

    我正在开发一个应用程序 我想要change the textcolor of the actionbar title 现在 我在清单中定义了一个主题
  • Parse.com:如何返回会话令牌?

    我创建了一个注册函数供我的应用程序调用 并创建了 Parse com 后端 JS 代码来注册用户 果然 该用户就会出现在数据库中 哎呀 我什至收到了要发送的验证电子邮件 这是much比应该的更难 它是主解析后端的 设置 部分下的设置 而不是
  • 使用 Anko 协程扩展的正确方法是什么?

    因此 我正在将一个示例应用程序从 RxJava 迁移到 Kotlin Anko Corountines 我想知道我是否正在采用最好的 第一种 方法 fun getPopulationList val ref asReference asyn
  • 访问 WooCommerce 可下载产品的可下载数据

    我正在尝试使用获取 WooCommerce 产品元数据 product new WC Product get the ID 我正在获取产品价格和所有其他值 该产品是可下载的 WooCommerce 产品 我想获取以下数据 每当我尝试获取时
  • 捆绑安装尝试使用缓存文件

    当我尝试进行捆绑安装时 我的 gem path 和 gem home 指向 usr local rvm gems 我没有写访问权限 并且由于权限无效而失败 因此 我已将两个路径更改为我有写访问权限的本地目录 这样做时 我进行捆绑安装 我得到
  • 使用 void/Task 响应注册 MediatR 管道

    我的命令 public class Command IRequest 我的处理程序 public class CommandHandler IAsyncRequestHandler
  • Alamofire 3 自定义编码到 Alamofire 4 自定义编码

    我在 Alamofire 3 中使用 customParameterEncoding 编写方法 此自定义编码只是将 queryString 中的 替换为 并返回它 Alamofire request GET SearchURL parame
  • 将外部 jQuery 文件包含在 $(document).ready() 中

    我有仅包含 jQuery 的外部 JavaScript 文件 我是否应该将每个外部文件中的所有代码都包含在 中 document ready 这里的最佳实践是什么 Thanks 我应该将每个外部文件中的所有代码都包含在 document r
  • 如何在AngularJS中获取offsetHeight、scrollHeight

    我正在创建一个指令 其中我需要三个值 滚动顶部 偏移高度 滚动高度 projectModule directive scroller function window return restrict A link function scope
  • 如何在 Netty 客户端中使用 Socks4/5 代理处理程序 (4.1)

    我需要在Netty客户端中配置socks代理 通过socks4或5代理请求不同的站点 尝试了很多免费袜子列表中的代理 例如 www socks proxy net http sockslist net http sockslist net
  • jquery查找元素的位置

    ul li one li li element li li text li li val li ul 我怎样才能获得职位ul被点击的li 我想这会为你做的 li click function alert this index 请注意 ind
  • Git Repo 在 Visual Studio 中应该处于解决方案级别还是项目级别

    如果我有一个包含多个项目的 C 解决方案 那么在解决方案文件夹或每个单独的项目文件夹中创建 Git 存储库会更好吗 多个开发商将致力于这些项目 您对此有什么经验 我使用多个 有时是重叠的 解决方案来包含一组相关的独立应用程序和共享库 正如其
  • 在 GroupBy 中连接字符串

    我正在做一个GroupBy与 Linq 上IQueryable 但我想做一个GroupBy在连接的字符串上 我现在拥有的是这样的 SomeList GroupBy x gt x Code x Location 这对我有用 但这也改变了x C
  • apache下PHP连接mssql超时

    PHP 版本 5 4 阿帕奇版本 2 4 CentOS 7 3 尝试使用以下 php 代码连接到 mssql db 当我从命令行运行它时 它工作正常 但是 当我将代码放在 apache 下 在同一服务器上 并通过浏览器调用时 我收到超时错误
  • 确保使用 JDBC 原子读取数据库表的最佳实践是什么?

    我有一个从数据库表中读取作业以进行处理的 java 应用程序 并且我可能有该应用程序的多个实例在不同的服务器上运行 因为每个作业都是独立的 一旦作业被选中进行处理 其状态将更新为 正在运行 我想确保从每个实例中检索要处理的作业是原子的 如何
  • 如何在 Keras 中进行权重不平衡类的交叉熵损失?

    使用 Keras 在高度不平衡的数据集上进行图像分割 并且我想按描述重新对与每个类中的像素值成比例的类进行加权here https blog fineighbor com tensorflow dealing with imbalanced
  • 如何迭代未知的 JSON 数据/对象?

    给出两个 JSON 示例 A name noname key nokey 进而 B property1 value3 country australia 是否可以创建一个 Powershell 脚本 该脚本可以采用任一 JSON 示例并循环
  • 抽象基类的重写属性抛出堆栈溢出异常

    我有一个基类 其声明如下 为了简洁而进行了修剪 public abstract class MyBaseClass public int RecordId get private set public string ObjectName g
  • R程序中非常大矩阵的svd

    我的 txt 文件中有一个矩阵 60 000 x 60 000 我需要获取该矩阵的 svd 我使用R 但我不知道R是否可以生成它 我认为可以计算 部分 svd使用irlba包装和bigmemory and bigalgebra无需使用大量内
  • 汇编中的内存复制

    首先 使用NASM 目标是x86 并在x86的16位实模式下运行 我想将一个内存位置的代码复制到另一个内存位置 然后对目的地进行调用 跳转 这样我就可以在那里执行代码 代码最初位于 0x1000 0x0 段 偏移量 现在 我想将其复制到 0