그래서 나는 기본적으로 _memcpy에 대한 호출을 내 점프로 바꾸고 소스에 저장하려고하는 코드 동굴에서 작업하고 있습니다. 원래 조립 : 나는 & T AT, 기본적으로 내가 저장하려면이 구문 승/사투를 벌인거야인라인 어셈블리 - 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
[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 '(크기)
사람이 내가 제대로 AT & T에서이 일을하는 방법을 알고 있나요 통사론? 정말 OS X에서 인텔 문법 그리워 : 피연산자가있을 때 코드가 레지스터 이름을 퍼센트 기호를 사용하여 결과 & T에서, 당신은 레지스터 이름을 use double percent signs에 이후/
즉시 값이 아닌 $를 사용 %는 $ 0 –