我想用 asm 函式修改 C 結構內的字串,但它不能正常作業......
假設我在 64 位架構上有這種型別的結構:
typedef struct my_struct
{
char letter1;
char letter2;
char *string;
}my_struct;
由于結構填充,sizeof(my_struct) 應為16,因為:
typedef struct my_struct
{
char letter1; // 1 byte
char letter2; // 1 byte
//6 bytes of padding
char *string; // 8 bytes
}my_struct;
所以,如果我呼叫這個 asm 函式:
void string_change(my_struct *s);
例如,我可以將結構字串的第一個字母更改為:
mov byte [rdi 8],'x'
但它不作業......你能幫我嗎?非常感謝。
這是我的 C 代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct my_struct
{
char letter1;
char letter2;
char *string;
}my_struct;
void string_change(my_struct *s);
int main(void)
{
my_struct s;
s.string = malloc(sizeof(char)*8);
strcpy(s.string,"bonjour");
printf("before call : s.string = %s\n",s.string);
string_change(&s);
printf("after call : s.string = %s\n",s.string);
free(s.string);
return 0;
}
這是我的匯編代碼:
bits 64
global string_change
section .text
string_change:
mov byte [rdi 8],'x';
ret
uj5u.com熱心網友回復:
跟進 Peter Cordes 的評論:
string_change: ;rdi = ptr to structure
mov rdi,[rdi 8] ;rdi = ptr to string
mov byte [rdi],'x' ;change first character of string
ret
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/447545.html
