首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Assembly将数据写入字符

问使用Assembly将数据写入字符
EN

Stack Overflow用户
提问于 2012-05-04 05:02:06
回答 1查看 6.9K关注 0票数 0

我用C语言创建了一个程序来生成char* processedData。我发送到我的汇编程序,并将其放入一个寄存器:

代码语言:javascript
复制
mov     edx, [ebp+12]
mov     edi, edx

我怎么才能在里面写一个字符呢?我知道我需要写一个char and inc edi...在一个循环中。但是我怎么写char呢,我已经把值放到另一个寄存器中了。但是如果我移动了X,49;char代码,我会丢失指针。我想做一些像这样的事情

代码语言:javascript
复制
for(p=malloc(100*sizeof(char*)); p!=NULL;p++){
    *p=//my char code
}

用于linux (DEBIAN) x86的程序集

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-04 05:07:07

edx是字符的目标地址。也就是说,edx是指向要写入的位置的指针。因此,请执行以下操作:

代码语言:javascript
复制
mov byte ptr ds:[edx], 49

这甚至可能行得通:

代码语言:javascript
复制
mov byte ptr ds:[edx], '1'

你说你的角色已经在某个注册表里了。我假设它是一个8位寄存器(ah/al/bh/bl/ch/cl/dh/dl),在这种情况下,你可以这样做:

代码语言:javascript
复制
mov [edx], ah

在这种情况下,汇编程序可以推断[edx]所指向的数据的大小。

我现在在Windows上,所以这段代码是为VC++编写的。它演示了如何复制字符串:

代码语言:javascript
复制
#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&T语法,您将需要做一些小转换,但希望这能为您指明正确的方向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10439272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档