【问题标题】:how to write this in C如何用 C 写这个
【发布时间】:2013-05-21 02:52:24
【问题描述】:

如何用 C 编写此 ASM 代码?

loc_536FB0:
mov cl, [eax]
cmp cl, ' '
jb short loc_536FBC
cmp cl, ','
jnz short loc_536FBF

loc_536FBC:
mov byte ptr [eax], ' '

loc_536FBF
mov cl, [eax+1]
inc eax
test cl, cl
jnz short loc_536FB0

我发现这是一个 for 循环,计数到 23 然后退出。

【问题讨论】:

  • 看看here
  • 那我应该再问一遍吗?
  • 确实有道理:)
  • 好的,那我去问问。
  • 您似乎已经对其进行了逆向工程,因为您说您知道它的作用。所以有什么问题?你不知道如何用 C 写一个for 循环?

标签: c assembly reverse-engineering ida


【解决方案1】:
char *str; // = value of eax
int i = 0;
while (str[i]) {
    if (str[i] < ' ' || str[i] == ',')
        str[i] = ' ';
    i++;
}

它遍历一个 c-string 并用空格 ' ' 替换 ' ' 和逗号 ',' 下面的所有字符。看到ASCII table:字符“下方”空格都是控制字符。该函数可能想要擦除它们以获得“干净”的字符串。字符串通过 eax 中的指针传递。

我不知道这与 23 有什么关系,但也许这就是您在调试时得到的一些特定输入。

【讨论】:

  • 小挑剔:考虑到问题中的汇编代码,将其转录为do { } while(); 会更准确,因为 NULL 终止符检查是每次迭代期间执行的最后一件事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2012-11-01
  • 2011-07-21
  • 2020-03-11
  • 2020-09-01
  • 2015-06-26
相关资源
最近更新 更多