2015-01-25 2 views
0

매크로가없는 구조 (순수한 어셈블리)를 연구하고 있습니다.asm의 구조

push 0 ; c = 0 
pushw 11 ; b = 11 
pushw 0 ; a = 0 

mov ecx, esp ; pointer to the structure 
execute->foo(ecx) 

두 질문 : ASM에서 1. 구조체는 구조 후 NULL이 있어야합니다

는 어셈블리의 기능과 구조

foo(struct house* ip) 
    house{ 
    short a; 
    short b; 
    int c; 
    } 

그리고 프로그램을 상상해? 나는 null과 다른 것을 넣는 코드를 보았다. 2. "asm"이 내 구조를 언급하는 것을 어떻게 알 수 있습니까? 변수는 ebp + nº 바이트로 참조됩니다.

답변

0

어셈블리에서 구조체 뒤에 NULL이 있어야한다는 요구 사항은 없습니다.

esp은 항상 스택에 푸시 한 내용을 가리키며 스택에서 메모리가 아래쪽으로 늘어나는 것으로 올바르게 가정합니다.

그러나 여기에서 시도하는 것처럼 푸시를 사용하여 임의의 구조를 설정할 수는 없습니다.

스택 항목은 CPU가 실행중인 모드에 따라 특정 고정 폭 (일반적으로 16, 32 또는 64 비트)을 가지므로 구조체의 모든 요소가 너비 이것은 스택 항목의 배수입니다.

+0

코드가 업데이트되었습니다. 내 질문은 어떻게 그가 esp, esp-2 및 esp-2를 선택해야하는지 foo라는 것을 아는 것이다. 승인! 나는 더 구체적 일 것이다. 이 코드에서 https://gist.github.com/geyslan/5174296 줄 71에서 bind를 호출하면 syscall은 스택에 넣어 진 구조체를 취합니다. 그러나 구조체가 .data에 있고 bind() 내 구조가 esp-nº에 없습니다. 내가 뭘하려고하는지 아십니까? – Rob

+0

다른 질문이있는 경우; 이전 답변의 댓글 입력란을 사용하는 대신 별도의 질문으로 게시하십시오. 그리고 관련 코드를 질문에 직접 포함하는 것을 잊지 마시기 바랍니다. – Michael

+0

다른 질문이 아닙니다. – Rob