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

时间:2016-11-20 23:23:04

标签: c assembly x86 inline-assembly

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

1 个答案:

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