我在C中创建了一个程序来生成一个char * processedData。 我发送到我的装配程序并将其放入注册表中:
mov edx, [ebp+12]
mov edi, edx
我怎样才能写一个字母。 我知道我需要 在循环中写一个char和inc edi ... 但是我怎么能写一个字符,我已经将值存入另一个寄存器。 但如果我做mov edx,49; char代码我会失去指针。 我想做像
这样的事情for(p=malloc(100*sizeof(char*)); p!=NULL;p++){
*p=//my char code
}
汇编为linux(DEBIAN)x86
答案 0 :(得分:1)
edx
是char的目标地址。也就是说,edx
是指向要写入的位置的指针。因此,这样做:
mov byte ptr ds:[edx], 49
这甚至可能有效:
mov byte ptr ds:[edx], '1'
你说你的角色已经在某个注册中。我假设它是一个8位寄存器(ah/al/bh/bl/ch/cl/dh/dl
),在这种情况下你可以这样做:
mov [edx], ah
在这种情况下,汇编程序可以推断出[edx]
所指向的数据的大小。
我现在在Windows上,所以这段代码适用于VC ++。它演示了复制字符串:
#include <stdlib.h>
#include <stdio.h>
char src[] = "hello";
char dest[8];
int main( void )
{
__asm
{
xor ecx, ecx
mov eax, offset src
mov edx, offset dest
loop_dest:
mov bh, byte ptr ds:[eax+ecx]
mov [edx+ecx], bh
inc ecx
cmp ecx, size src
jnz loop_dest
}
printf("%s\n", dest);
return EXIT_SUCCESS;
}
如果您的汇编程序使用AT&amp; T语法,您需要进行一些小翻译,但希望这可以指向正确的方向。