使用内联汇编 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
}
}
所以我在 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
}
}