使用内联汇编 ia32 更改指向包含在结构中的数组的指针

Change pointer to an array that is contained in a struct using inline assembly ia32

所以我在 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 数组值?

你可以使用

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
    }
}