反汇编遇到stosd和stosw,不知道如何翻译?谢谢指点!

zhoujiamurong 2008-05-20 03:26:16
翻译一段汇编到C语言,应该是一个大结构体的初始化,
mov byte ptr [esi+4Ch], 0E1h ; // pdEx2->var76 = -31;// 0x0e1
mov [esi+4Dh], bl ; // pdEx2->var77 = 0; 因为ebx = 0
xor eax, eax ; // eax = 0;
lea edi, [esi+50h] ; // edi = &pdEx2->var80
stosd
stosd
mov [esi+58h], bx ; // pdEx2->var88 = 0;
mov [esi+64h], bx ; // pdEx2->var100 = 0;
xor eax, eax ; // eax = 0;
lea edi, [esi+5Ah] ; // edi = &pdEx2->var90;
stosd
stosd
stosw
...全文
1146 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoujiamurong 2008-05-20
  • 打赏
  • 举报
回复
谢谢啊
cnzdgs 2008-05-20
  • 打赏
  • 举报
回复
就是清0操作,把从esi+50h开始的8字节清0,把从esi+5Ah开始的10字节清0,这样写代码短一些。
zhoujiamurong 2008-05-20
  • 打赏
  • 举报
回复
stosd
stosd
前面的可以是数组

后面的这个应该不是吧?最多是两个大小的数组
stosd
stosd
stosw
dongyi940333 2008-05-20
  • 打赏
  • 举报
回复
应该是如一楼所说

xor eax, eax
lea edi, [esi+50h]
stosd
stosd

stosd指令是将EAX中的内容存储到由ES:EDI寻址的内存地址.

这里EAX的值为0,应该是初始化一个数组.

不对之处请原谅!!!
用户 昵称 2008-05-20
  • 打赏
  • 举报
回复
连续的stosX应该是初始化一个数组
zhoujiamurong 2008-05-20
  • 打赏
  • 举报
回复
发一下源码
mov byte ptr [esi+4Ch], 0E1h
mov [esi+4Dh], bl
xor eax, eax
lea edi, [esi+50h]
stosd
stosd
mov [esi+58h], bx
mov [esi+64h], bx
xor eax, eax
lea edi, [esi+5Ah]
stosd
stosd
stosw
mov ebp, 584D4F43h
push ebp ; Tag
xor eax, eax
mov ecx, 400h
lea edi, [esi+67h]
push 4000h ; NumberOfBytes
rep stosd
zhoujiamurong 2008-05-20
  • 打赏
  • 举报
回复
是不是这样?
mov byte ptr [esi+4Ch], 0E1h ; // pdEx2->var76 = -31;// 0x0e1
mov [esi+4Dh], bl ; // pdEx2->var77 = 0; 因为ebx = 0
xor eax, eax ; // eax = 0;
lea edi, [esi+50h] ; // edi = &pdEx2->var80
stosd ; // pdEx2->var80 = 0;
stosd ; // pdEx2->var84 = 0;
mov [esi+58h], bx ; // pdEx2->var88 = 0;
mov [esi+64h], bx ; // pdEx2->var100 = 0;
xor eax, eax ; // eax = 0;
lea edi, [esi+5Ah] ; // edi = &pdEx2->var90;
stosd ; // pdEx2->var90 = 0;
stosd ; // pdEx2->var94 = 0;
stosw ; // pdEx2->var98 = 0;

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧