所以我正在代碼洞裏,我基本上用我的跳轉替換_memcpy的調用,然後我想保存源代碼中的內容。原裝配:行內組裝 - AT&T語法 - 如何移動到一個變量
mov [esp+8], edx ; size
mov [esp+4], eax ; ptr to source
mov eax, [ebp+arg_4]
mov [esp], eax ; ptr to destination
call _memcpy
我掙扎瓦特/本作的語法AT & T,基本上我要存儲[ESP + 8],[ESP + 4]和[ESP]在我自己的變量。我試圖做這種方式:
void codecave_jump(void) __attribute__ ((signal, naked));
void codecave_jump(void){
void *destination, *source;
size_t size;
// push all registers onto the stack
__asm__("pushal\n\t");
// get size
__asm__ __volatile__(
"movl 8(%ecx), %0\n\t" : "=g" (size)
);
// get source
__asm__ __volatile__(
"movl 4(%ecx), %0\n\t" : "=g" (source)
);
// get destination
__asm__ __volatile__(
"movl %%eax, %0\n\t" : "=g" (destination)
);
// restore all of our registers
__asm__("popal\n\t");
// call memcpy
__asm__("call __memcpy\n\t");
// do the copy
memcpy(destination, source, size);
}
而且我發現了以下錯誤: 錯誤:%後數編號失蹤-letter 錯誤:數編號%後失蹤-letter
基本上它的大喊大叫我爲我: 「MOVL 8(%ECX),%0 \ n \ t」 的: 「= G」(大小)
有誰知道我應該如何正確地在& T爲這樣句法?我真的很想念在OS X的英特爾的語法:/
立即值使用$不喜歡%$ 0 –