所以我正在代码洞里,我基本上用我的跳转替换_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 –