[英]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.