簡體   English   中英

匯編:在寄存器中存儲一個字符串

[英]Assembly: store a string in register

假設我們在架構 x86_64 上工作,假設我們有以下字符串“123456”。 在 ASCII 字符中,它變為31 32 33 34 35 36 00

現在,我應該使用哪些匯編指令以 %rdi 存儲該字符串的地址(指向該字符串)的方式將該字符串的整個(即使是碎片化的)內容移動到某處?

因為我不能簡單地將字符串的十六進制表示形式移動到寄存器中,就像使用無符號值一樣,我該怎么做?

有幾種方法可以做到這一點。 如果您想首先將整個字符串移動到另一個偏移量,則必須使用循環來執行此操作。

mov rbx, 0
loop:
 mov al, [string+rbx]
 mov [copyoffset+rbx], al
 inc rbx
 cmp rax, 0x0
 jne loop
... Insert other code here

然后您可以使用下面描述的 Lea 指令將其移入 rdi。

如果您只想加載字符串的地址而不關心移動它,您可以使用 lea

lea rdi, [stringoffset]

編輯:將 rax 更改為 al,因此我們一次只移動一個字節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM