【问题标题】:Writing Assembly Code for a Tattoo为纹身编写汇编代码
【发布时间】:2012-07-02 09:29:00
【问题描述】:

我请求帮助我编写一个简单的“程序纹身”的 32 位汇编代码。

我想纹身。仔细考虑之后,我决定我想要一个使用汇编代码并与我的女儿 Alisha 打交道的纹身。我的想法是提出一种“不合逻辑的计算”,它违反了汇编语言的规律。我想向像我这样习惯了 1 和 0 的人来说,生孩子是多么不合逻辑。

我正在考虑使用基于 x86 的 32 位寄存器,例如 EAX、EBX 和 ECX,当然还有一些推送和弹出。

纹身不会有 cmets(括号中没有),但会包括 start: 符号。

start:
    mov eax, 53656C66h   (ASCII for "Self")
    mov ebx, 57696665h   (ASCII for "Wife")
    add ebx, eax

    push ebx
    push 3F81DBh         (Decimal 4162011 = daughter's birth date)

    pop ecx              (The first pop would give my daughter's birth date)
    pop ecx              (the second pop would NOT give the answer of eax added to ebx,
                          but would rather give my daughter’s nickname)
    ??? ecx

我的想法是替换 ???使用指令读取然后显示 ecx 中的值现在是 416c69h(ASCII 表示“阿里”,我女儿的昵称)。我认为这个想法很棒,如果我得到它,我会发布纹身的图片(当然)。

我的想法是最后一次弹出会违反计算机逻辑。从本质上讲,生孩子违背了我们所知道的“逻辑”,所以这是我试图平行出生之美的尝试。

还有其他想法吗?

【问题讨论】:

  • bx 是一个 16 位寄存器。值 5769666579h 是 31 位长......也许你应该考虑另一个想法......
  • 好点麦克马德。我刚刚切换到使用扩展寄存器。实际上,ACSII 每个字符使用 7 位,对吧?这意味着我需要使用 64 位来保存 ASCII 中的“Alisha”。我可以使用“阿里”,因为那是她的昵称。
  • 你不想得到一个 64 位的纹身吗?
  • wifey 不适合 32 位,顺便说一句
  • “读取”值的指令是mov。您需要指定要放置已读取值的位置。如果要比较值,需要cmp

标签: assembly nasm


【解决方案1】:

有点奇怪的是程序什么都不做,真的。 为什么不编写代码,通过组合您的姓名、您妻子的姓名以及她的出生日期的某些编码等内容来生成您女儿的姓名?或许通过一系列带有一些有意义值的XOR 指令?

【讨论】:

  • 我的想法是最后一次弹出会违反正常的计算机逻辑。它不会返回 5769666579h + 4d65h 的答案,而是返回我女儿的名字。不过,我真的很喜欢你的想法。现在,我只需要找出如何进行一些异或运算,以从“我”和我妻子的昵称/名字中导出十六进制的“阿里”。我还需要找出如何将这些东西更好地放入寄存器中......我现在更愿意坚持使用 32 位。
  • 我想从 movs 开始还是应该加载寄存器而不是移动一个值?我不确定在汇编中填写空寄存器的最佳方法是什么。换句话说,我想通过引入“我”(ASCII 为十六进制)和“妻子”(ASCII 为十六进制)来开始程序。一旦我引入了这些值,我想开始用诸如生日/特殊日期/等之类的东西对它们进行异或运算。为了从 XOR 中得到我女儿的名字。这会很棘手!
  • 你可以mov eax, 'Wife',这个会被汇编器理解的。
  • drhirsch> 我打算使用十六进制值进行混淆,因为它不那么明显。我喜欢大多数人都不知道他们在看什么的想法:)
猜你喜欢
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2016-05-05
  • 2012-02-12
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多