這個問題聽起來很奇怪,但它需要將代碼注入二進制文件。使用兩個字節(英特爾)使eax = 1
你能想出一種方法來使eax等於1,而不依賴於進位標誌或其他寄存器等內容嗎?
但是僅限於2個字節。 3很容易,可以用很多方式完成,但可以用2完成?
這個問題聽起來很奇怪,但它需要將代碼注入二進制文件。使用兩個字節(英特爾)使eax = 1
你能想出一種方法來使eax等於1,而不依賴於進位標誌或其他寄存器等內容嗎?
但是僅限於2個字節。 3很容易,可以用很多方式完成,但可以用2完成?
我懷疑你的意思是2個字節,而不是2個操作碼。如果你真的是2個操作碼,那麼下面的3個字節的替代方案浮現在腦海中:
xor eax, eax
inc eax
sub eax, eax
inc eax
我不能立刻想到會做相當於兩個字節序列的 - 我懷疑有沒有。
mov $1, %eax
nop
夠了嗎? :)
如果你真的意味着兩個字節,而不是兩個操作碼,你可能很難與這些約束。我會看看周圍的代碼,看看是否有什麼可以利用的(例如,在其他代碼中間執行代碼等)。或者找到一種獲得更多代碼空間的方法。
好,如果我想要10個操作碼:P您的例子實際上是6個字節。 (英特爾語法'mov eax,1') – Spyros
6字節但只有2個操作碼 - 也許你打算要求2字節而不是2個操作碼? –
你的意思是兩個字節,而不是兩個操作碼,對不對? –
您還應該指定架構。在x86_64中,這是不可能的 –