gpt4 book ai didi

linux - movsb asm 没有按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 09:13:25 25 4
gpt4 key购买 nike

从教程中我了解到 movsb 会将数据从 ds:si 复制到 es:di。但就我而言,它不起作用。

  1. 虽然尝试使用 gdb 进行调试,但我无法打印分别在 .data 部分和 .bss 部分中清除的 s1 和 s2 中的值。
  2. 任何人请帮助我们如何看到 s2 的值,同时打印 $p2 我在调试中无效?
  3. 为什么这里s2的值不随s1的值变化?代码如下
section  .text
global _start
_start:
mov esi,s1
mov edi,s2
cld
rep movsb
mov edx,20
mov ecx,s2
mov ebx,1
mov eax,4
int 80h
mov eax,1
int 80h
section .data
s1 db 'qwerty',0
section .bss
s2 resb 20

最佳答案

当 Linux 启动您的进程时,您的所有寄存器(包括 ECX)都将为零,ESP 除外。 (ABI 说他们可以容纳垃圾,但 Linux 选择零以避免信息泄漏。)

因此rep movsb将复制零字节。是 memcpy,不是 strcpy,它不看数据。

这就是为什么您的程序不会像您期望的那样在没有先设置 ECX 的情况下使用 rep movsb 崩溃。

关于linux - movsb asm 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com