gpt4 book ai didi

c - 汇编 如何将 REP STOS 转换为 C 代码

转载 作者:太空狗 更新时间:2023-10-29 15:20:33 24 4
gpt4 key购买 nike

我一直在调试 REP STOS DWORD PTR ES:[EDI] 一段时间

根据我的结论,它总是使用

ECX 作为计数器。EAX 作为将通过 EDI 复制然后附加 ECX 次的值所以在放入 EDI

的指向转储之后

它似乎用什么覆盖了 EDI 的指向数据它似乎总是只使用 ECX 作为计数器,同时将 EDI 更改 4 个字节。当计数器达到 0 时它停止工作

所以我想出了这种代码

while(regs.d.ecx != 0)
{
*(unsigned int *)(regs.d.edi) = regs.d.eax;
regs.d.edi += 4;
regs.d.ecx--;
}

似乎可以工作.. 但我很担心,因为我只是靠运气和猜测来做到这一点。它是固体吗?比如它总是 ECX 作为计数器,EAX 作为数据,并且它总是复制 4 个字节,从不少于?

最佳答案

你几乎是正确的。唯一的区别是方向标志 (DF) 控制是从 EDI 中添加还是减去 4(它实际上是从 ES 偏移的 segmentation 基础,但您可能不关心):

for (; regs.d.ecx != 0; regs.d.ecx--)
{
*(unsigned int *)(regs.d.edi) = regs.d.eax;
regs.d.edi += regs.eflags.df ? -4 : 4;
}

注意 for (; regs.d.ecx != 0; regs.d.ecx--) { }REP 前缀的 Action ,循环体是 STOS DWORD... 的 Action 。

既然你问了很多这样的问题,我想你会找到 Intel 64 and IA-32 Architectures Software Developer’s Manual, Volumes 2A and 2B有用。这些包含每个指令和前缀的描述,包括伪代码描述。

关于c - 汇编 如何将 REP STOS 转换为 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7763581/

24 4 0
文章推荐: C编程同时
文章推荐: c - 零线程进程?
文章推荐: html - 你能设计一个 标签吗?
文章推荐: c - 清零文件
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com