【问题标题】:Memory values to ASCII [closed]ASCII的内存值[关闭]
【发布时间】:2012-01-04 21:22:10
【问题描述】:

假设我正在反编译代码并且遇到以下值: cmp, 0x539

因为我编写了代码,所以知道它代表 1337 (0x539)。 假设我遇到了这个,但我不知道值是什么...如何将 0x539 转换为 ASCII...

提前感谢您的帮助:)

【问题讨论】:

  • 转换成ASCII是什么意思?没有这样的 ASCII 字符。
  • 那么,你想把一个整数转换成它的十进制字符串表示吗?你的输入和输出到底是什么?
  • 我的意思是可读的人类格式。假设我遇到 cmp, 0x763。我如何能够找出或将 0x763 转换为字符串(整数)或其他...
  • 最初是什么格式的?十六进制格式的字符串、整数还是什么?
  • 原来是整数。程序要求用户输入一个数字。

标签: memory assembly reverse-engineering


【解决方案1】:

它们都是 ascii 和人类可读的。 0x539 是以 16 为基数,1337 是以 10 为基数。在这种情况下,最右边的数字 7 位于个数列中,将其乘以 10 的 0(一)次幂,然后下一列乘以 10 的幂1 下一个 10 的 2 次方,第四个 10 的 3 次方,以此类推。因此,当您以人类的身份阅读以 10 为底的数字时,该数字为 (1*(10^3)​​)+(3*(10^2))+(3*(10^1))+(7*(10^ 0))。或者我们也将它学习为 1000 (10^3)​​、300、3 10 或 30、7 个或 7。对于任何基数都是如此,因为十六进制 0x539 是 (9*(16^0))+(3 *(16^1))+(5*(16^2))。二进制 0x539 是 0b010100111001 可以读为 (1*(2^0))+(0*(2^1))+(0*(2^2))+(1*(2^3))+ ...那个数字 0b010100111001 是八进制 2471 可以读为 (1*(8^0))+(7*(8^1))+(4*(8^2))+(2*(8^3))

所有处理器关心的是基于逻辑门使用的某些电压标准的 1 和 0,其他一切都在旁观者的眼中,一些位可能被认为是地址、ASCII 字符或电话号码,或浮点数,无论如何,处理器不在乎,它只是位。反汇编程序有时会向您显示十进制和十六进制这两种流行格式,您可能使用一种或另一种来创建该数字(如果它是您创建/编程的立即数)。不久前,如果它可能是十进制和八进制而不是十进制和十六进制,或者可能只有八进制而不是十进制。

虽然所有的形式都是人类可读的,但 0x 符号或末尾的 h 或者有些人使用 16# 或 $ 来表示十六进制,非常人类可读我知道这是一个十六进制数字并且知道如何读取基数 16十六进制。如果不是,你假设它是十进制的,也非常易于阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多