2017-10-18 62 views
-3

我在Assembly中得到了这个代码,它基本上在游戏中打印了一条灰色的消息。哪一行定义了颜色?

下面的代码:

enter image description here

我的问题是哪一行代码定义了灰色?

+1

从代码中,我想起了'printf'系列函数,首先调用一些格式化字符串和值的格式化程序。你是否检查了从'StringPool__GetString'返回的字符串值,格式字符串是否不包含一些额外的控制字符来改变颜色?像[ANSI转义码](https://en.wikipedia.org/wiki/ANSI_escape_code)或一些自定义方案。 – Ped7g

+1

另一种选择当然是被调用的例程* always *会打印一个灰色的字符串,而这个代码与此无关。 –

+3

我投票结束这个问题作为题外话题,因为这属于https://reverseengineering.stackexchange.com/(如果有的话,因为几乎没有证据表明这段代码与颜色有关)。但是IDK,也许是那边的人会喜欢这个有用的话。 –

回答

1

这可能是在这条线的7

mov byte ptr [ebp+var_4], 7 

但是,这只是胡乱猜测的基础上,有7曾经是浅灰色的CGA's 16-color palette的事实。

事实是,我们无法通过盯着这个小小的反汇编代码来告诉这段代码干什么。 它是机器语言; 一切由位和字节表示。 不仅仅是颜色,还包括数字,字符,形状,地理坐标,日期,时间,甚至代码本身。 你必须弄清楚哪个是哪个。

我通常从猜测开始(如上所述),如果失败,我会尝试更彻底的逆向工程。 只需遵循数据;无论注入相关BIOS调用还是(存储器映射)I/O地址的字节都必须是颜色。这个数据的轨迹可能很长并且曲折; 您需要分析比这几行更多的代码。

+0

在我问之前,我已经尝试修改'7'。通常在Assembly中定义的颜色如何? – Suspended

+1

@暂停它们不是。 – Ped7g

+2

@ Suspended:那么你应该在问题中这么说,这样人们就会知道已经尝试了什么。 –