2014-09-25 8 views
0

어셈블리 코드가 매우 새롭고 함수 인수로 명령 줄 인수 (argc, argv, env)를 전달하는 방법을 알아야합니다. 2 번 줄 (# RIGHT HERE)은 구현을 모르는 곳이며 세 가지 인수를 내 주체에 전달해야합니다. 아무도 도와 줄 수 있습니까?어셈블리를 사용하여 argc, argv, env 함수를 전달하십시오.

다음을 실행하여 컴파일 중입니다. gcc -m32 t.c s.s. 아래의 코드는 레복하고 mymain 인수를 전달 및 사용을 스택에 대한 호출 규칙에 대해 설명 t.c

당신은 32 비트 리눅스 ABI (응용 프로그램 바이너리 인터페이스)를 파악해야 할 것
main:  
    #RIGHT HERE 
    call mymain 
    ret 

답변

1

입니다. 여기에 모든 세부 정보를 나열하지는 않지만 웹에서 쉽게 액세스 할 수 있습니다.

빠른 요약 : 32 비트 Linux는 호출하기 전에 스택에 저장된 인수가 필요합니다. 인수를 저장하거나 스택 포인터를 자동으로 감소시키는 충분한 "스택"공간이 필요합니다. 이 공간은 통화가 반환 된 후에 정리해야합니다.

ABI를 연구하는 데 시간을 낭비하고 싶지 않다면 간단한 대안은 모든 인수를 전달하는 함수를 호출하는 C 프로그램을 작성한 다음 컴파일하고 어셈블리를보고 어떻게 보이는지 확인하는 것입니다 완료되고, 사본.