所以我在C中有这个代码,基本上是一个包含指向数组的指针的结构和一个改变索引0中数组值的函数
typedef struct archivo
{
unsigned char *info;
} FILE;
void funct(FILE *arch) {
arch->info[0] = 'b';
}
所以我必须将funct函数转换为内联汇编。我尝试了以下
void funct(FILE *arch) {
_asm {
mov eax, 0
mov ebx, arch.info[eax]
mov ecx, [ebx]
mov ecx, 'b'
}
}
但是当我打印输出时,信息继续具有相同的值。 所以我用以下代码尝试输出
void funct(ARCHIVO *arch)
{
printf("\n--%c--\n", arch->info[0]);
_asm {
mov eax, 0
mov ebx, arch.info[eax]
mov ecx, [ebx]
mov ecx, 'b'
}
printf("\n--%c--\n", arch->info[0]);
}
我得到了输出
--P--
--P--
如何设置更改位置0的C数组值?
答案 0 :(得分:1)
你可以使用
void funct(FILE *arch) {
_asm{
mov eax, arch
mov eax,[eax]archivo.info
mov byte ptr [eax],'b'
}
}
或更好
__declspec(naked) void __fastcall funct2(FILE * /*arch*/) {
_asm{
mov eax,[ecx]archivo.info
mov byte ptr [eax],'b'
ret
}
}