如何阅读此汇编代码(尤其是“ dq”)?

时间:2018-12-19 16:24:34

标签: assembly x86

除了我不理解代码外,我没有任何问题。 dq是什么意思?它在装配中起什么作用?所有这些数字代表什么?文本文件仅包含歌曲歌词,所以我猜只是单词。但这仅仅是十六进制表示法吗?

我只是用反汇编器打开了一个文本文件,只是为了了解它的含义,但是我在任何地方都看不到像jmp命令这样的常规汇编语法。我怎么知道这意味着什么?

; Segment type: Pure code
          segment byte public 'CODE' use64
               assume cs:seg000
                assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing

dq 6E00550022FEFFh, 65006400200064h, 560020006E0069h, 6C00650067006Fh

dq 6E0061006B0020h, 6900730020006Eh, 6E00650067006Eh, 0D000A000D0022h

dq 6500690053000Ah, 67006100730020h, 6D0020006E0065h, 20002C00720069h

dq 73007300610064h, 65006900530020h, 6C006C00610020h, 68002000730065h

dq 6E006500620061h, 6100770020002Ch, 69005300200073h, 6F007700200065h

dq 6E0065006C006Ch, 6E0055000A000Dh, 65006400200064h, 560020006E0069h

dq 6C00650067006Fh, 6E0061006B0020h, 6900730020006Eh, 6E00650067006Eh

dq 620041000A000Dh, 64002000720065h, 65007600200075h, 65007400730072h

dq 20007400730068h, 6800630069006Dh, 630069006E0020h, 0A000D00740068h

dq 76002000750044h, 74007300720065h, 74007300680065h, 630069006D0020h

dq 69006E00200068h, 0D007400680063h, 59000A000D000Ah, 7400200075006Fh

dq 20006C006C0065h, 7400200065006Dh, 20007400610068h, 270075006F0079h

dq 67002000650076h, 6500200074006Fh, 79007200650076h, 6E006900680074h

dq 6F007900200067h, 61007700200075h, 0A000D0074006Eh, 200064006E0041h

dq 720075006F0079h, 72006900620020h, 61006300200064h, 6900730020006Eh

dq 0A000D0067006Eh, 20007400750042h, 200075006F0079h, 27006E006F0064h

dq 65006700200074h, 65006D00200074h, 6F0059000A000Dh, 6F006400200075h

dq 2000740027006Eh, 20007400650067h, 0A000D0065006Dh, 690053000A000Dh

dq 61007300200065h, 2C006E00650067h, 65006900530020h, 62006100680020h

dq 730020006E0065h, 65006200650069h, 7500570020006Eh, 7200650064006Eh

dq 73006500670020h, 6E006500680065h, 6E0055000A000Dh, 65006400200064h

dq 560020006E0069h, 6C00650067006Fh, 74007300690020h, 0FC007200670020h

dq 41000A000D006Eh, 20007200650062h, 6B002000750064h, 73006E006E0061h

dq 69006D00200074h, 6E002000680063h, 74006800630069h, 68006500730020h

dq 0A000D006E0065h, 6B002000750044h, 73006E006E0061h, 69006D00200074h

dq 6E002000680063h, 74006800630069h, 68006500730020h, 0A000D006E0065h

dq 6F0059000A000Dh, 61007300200075h, 6F007900200079h, 65007600270075h

dq 65006500730020h, 6500730020006Eh, 20006E00650076h, 64006E006F0077h

dq 0D007300720065h, 64006E0041000Ah, 75006F00790020h, 69006200200072h

dq 69002000640072h, 72006700200073h, 0D006E00650065h, 7400750042000Ah

dq 75006F00790020h, 6E006100630020h, 73002000740027h, 6D002000650065h

dq 59000A000D0065h, 6300200075006Fh, 740027006E0061h, 65006500730020h

dq 0D0065006D0020h, 57000A000D000Ah, 20006E006E0065h, 20007200680049h

dq 74007200650077h, 6C006C006F0076h, 42002000720065h, 74006900730065h

dq 46000A000D007Ah, 650067006E0061h, 2C006E00610020h, 63006900640020h

dq 75007A00200068h, 73006500620020h, 65007700680063h, 0D006E00650072h

dq 6800630053000Ah, 69002000750061h, 65006D0020006Eh, 200065006E0069h

dq 68006300690052h, 67006E00750074h, 630049000A000Dh, 65007700200068h

dq 20006500640072h, 64006E00750072h, 69006500730020h, 49000A000D006Eh

dq 77002000680063h, 65006400720065h, 6E007500720020h, 65007300200064h

dq 0A000D006E0069h, 680057000A000Dh, 790020006E0065h, 2000720075006Fh

dq 7A006900720070h, 70002000640065h, 6500730073006Fh, 6F006900730073h

dq 0A000D0073006Eh, 72006100740053h, 6F007400200074h, 69006500770020h

dq 79002000680067h, 6400200075006Fh, 0D006E0077006Fh, 6F006F004C000Ah

dq 6E00690020006Bh, 200079006D0020h, 65007200690064h, 6F006900740063h

dq 49000A000D006Eh, 20006C006C0027h, 72002000650062h, 64006E0075006Fh

dq 270049000A000Dh, 620020006C006Ch, 6F007200200065h, 0D0064006E0075h

dq 57000A000D000Ah, 20006E006E0065h, 6E006900650064h, 67006F00560020h

dq 6B0020006C0065h, 74007500700061h, 73006900200074h, 42000A000D0074h

dq 67006E00690072h, 73006500200074h, 63006900640020h, 75007200200068h

dq 7200650074006Eh, 53000A000D003Fh, 6B002000650069h, 65006E006E00F6h

dq 7500610020006Eh, 77006500670066h, 74006B00630065h, 72006500770020h

dq 0D006E00650064h, 6800630049000Ah, 72006500770020h, 72002000650064h

dq 200064006E0075h, 6E006900650073h, 630049000A000Dh, 65007700200068h

dq 20006500640072h, 64006E00750072h, 69006500730020h, 0D000A000D006Eh

dq 6500680057000Ah, 6F00790020006Eh, 62002000720075h, 20006400720069h

dq 62002000730069h, 65006B006F0072h, 57000A000D006Eh, 20006C006C0069h

dq 62002000740069h, 67006E00690072h, 75006F00790020h, 77006F00640020h

dq 0A000D003F006Eh, 200075006F0059h, 2000790061006Dh, 61002000650062h

dq 65006B006F0077h, 49000A000D006Eh, 20006C006C0027h, 72002000650062h

dq 64006E0075006Fh, 270049000A000Dh, 620020006C006Ch, 6F007200200065h

dq 0D0064006E0075h, 53000A000D000Ah, 73002000650069h, 6E006500670061h

dq 720069006D0020h, 6100640020002Ch, 53002000730073h, 6A002000650069h

dq 6E006500640065h, 6E006F00540020h, 68006500670020h, 200074007200F6h

dq 65006200610068h, 55000A000D006Eh, 6400200064006Eh, 20006E00690065h

dq 650067006F0056h, 61006B0020006Ch, 730020006E006Eh, 69007700680063h

dq 6E00650067006Eh, 620041000A000Dh, 64002000720065h, 61006B00200075h

dq 740073006E006Eh, 630069006D0020h, 69006E00200068h, 20007400680063h

dq 65007200F60068h, 44000A000D006Eh, 61006B00200075h, 740073006E006Eh

dq 630069006D0020h, 69006E00200068h, 20007400680063h, 65007200F60068h

dq 0D000A000D006Eh, 75006F0059000Ah, 6C006500740020h, 65006D0020006Ch

dq 61006800740020h, 6F007900200074h, 65007600270075h, 61006500680020h

dq 65002000640072h, 79007200650076h, 75006F00730020h, 7400200064006Eh

dq 65007200650068h, 0D007300690020h, 64006E0041000Ah, 75006F00790020h

dq 69006200200072h, 63002000640072h, 730020006E0061h, 67006E00690077h

dq 750042000A000Dh, 6F007900200074h, 61006300200075h, 2000740027006Eh

dq 72006100650068h, 0D0065006D0020h, 75006F0059000Ah, 6E006100630020h

dq 68002000740027h, 20007200610065h

db  6Dh ; m

align 2

dw 65h, 0FEFFh
          ends
                 end

1 个答案:

答案 0 :(得分:1)

您看到的只是一个旨在将字节解释为机器代码或二进制数据的程序,该程序试图解释UTF-16 Unicode格式的文本。十六进制FF,FE字节构成一个Unicode字节顺序标记(BOM),其他字节构成一个16位“字符”的序列(准确地说,是代码点)。第一行:

dq 6E00550022FEFFh, 65006400200064h, 560020006E0069h, 6C00650067006Fh

实际上是Unicode文本(准确地说,是两个字节的BOM,后跟16位小尾数Unicode文本:

  

“ Und dein Vogel

),但是由于程序将您扔给它的所有内容都视为二进制数据,因此它将数据显示为四字(64位值),因此在每行的开头显示dq

FWIW:dq的意思是“定义四字” [即定义64位项目]。

这是由于错误的目的而使用错误的程序的原因:废话

要阅读文本,请使用文本编辑器或文字处理器,而不要使用十六进制编辑器。 FWIW,如果您在字节模式下使用了十六进制编辑器,则会看到它是文本。右侧将显示为:

..".U.n.d. .d.e.
i.n. .V.o.g.e.l.

看起来像德国歌曲文字。