2011-07-27 14 views
-1

這個問題聽起來很奇怪,但它需要將代碼注入二進制文件。使用兩個字節(英特爾)使eax = 1

你能想出一種方法來使eax等於1,而不依賴於進位標誌或其他寄存器等內容嗎?

但是僅限於2個字節。 3很容易,可以用很多方式完成,但可以用2完成?

+2

你的意思是兩個字節,而不是兩個操作碼,對不對? –

+0

您還應該指定架構。在x86_64中,這是不可能的 –

回答

5

我懷疑你的意思是2個字節,而不是2個操作碼。如果你真的是2個操作碼,那麼下面的3個字節的替代方案浮現在腦海中:

xor eax, eax 
    inc eax 

    sub eax, eax 
    inc eax 

我不能立刻想到會做相當於兩個字節序列的 - 我懷疑有沒有。

2
mov $1, %eax 
nop 

夠了嗎? :)

如果你真的意味着兩個字節,而不是兩個操作碼,你可能很難與這些約束。我會看看周圍的代碼,看看是否有什麼可以利用的(例如,在其他代碼中間執行代碼等)。或者找到一種獲得更多代碼空間的方法。

+0

好,如果我想要10個操作碼:P您的例子實際上是6個字節。 (英特爾語法'mov eax,1') – Spyros

+6

6字節但只有2個操作碼 - 也許你打算要求2字節而不是2個操作碼? –