【发布时间】:2022-01-02 20:18:11
【问题描述】:
假设我们在 x86_64 架构上工作,假设我们有以下字符串“123456”。在 ASCII 字符中,它变为31 32 33 34 35 36 00。
现在,我应该使用哪些汇编指令以 %rdi 存储该字符串的地址(指向该字符串)的方式将该字符串的整个(即使是碎片化的)内容移动到某处?
因为我不能简单地将字符串的十六进制表示移动到寄存器中,就像使用无符号值一样,我该怎么做?
【问题讨论】:
-
字符串从何而来?如果它是文字,您可能只需加载它的地址。
-
我不明白你问题的最后一部分。您绝对可以将此字符串移动到寄存器中,就像使用整数一样。它将适合 64 位寄存器。
-
您需要解决的实际问题是什么?您需要“移动整个内容”的原因是什么?现在感觉很像XY problem
-
不太清楚你想要什么,请edit并显示值,
rdi应该包含字符串"123456"。问题标题与问题并不真正匹配。您是在谈论您想要在寄存器中的字符串的 address 还是您想要在寄存器中的字符串的 content。 -
字符串的“十六进制表示”是什么意思?你的意思是在 asm 源中,它被组装成二进制,比如
mov eax, 0x123456?就像编译器用 mov-immediate godbolt.org/z/dKnTz8b9G 初始化小字符串一样? (或者你的意思是你想要代表无符号数字的 ASCII 字符的字节,就像你可以在运行时从 How to convert a binary integer number to a hex string? 获得)
标签: c string assembly x86-64 stack-memory