2014-04-21 3 views
-3

왜 다음 코드가 실행 오류를 일으키는 지 궁금합니다.왜 실행 오류가 발생합니까?

#include <stdlib.h> 
int main(void) { 
    asm("pushf\norl $ 0x40000, (%esp)\npopf\n"); 
    *((int*) (((char*) malloc(5)) + 1)) = 23; 
    return 0; 
} 

감사!

+2

Q : 디버거에서 밟았을 때 무엇을 발견 했습니까? Q : 귀사의 플랫폼은 무엇입니까? 컴파일러? 나는 리눅스와 GCC를 추측하고 있지만, 모르겠다. 정확히이 코드로 무엇을하려고 하는가? – FoggyDay

+2

EFLAGS [(자세히)] (http://stackoverflow.com/questions/548164/mis-aligned-pointers-on-x86)에서 정렬 검사 비트를 설정하고 정렬되지 않은 32 비트 값을 쓰려고합니다 주소. BTW, '실행 오류'는 매우 모호합니다. 실제 오류가 더 유용 할 것입니다. –

+0

'sizeof (int)'가 8보다 큰 경우, 할당 할 수있는 메모리가 충분하지 않다. – chux

답변

0

아마도 AFAIK로 보호 된 정렬 검사 플래그가 수정 중이기 때문일 수 있습니다. 또는 malloc()이 정렬 된 영역을 반환하고 액세스가 정렬되지 않았기 때문에? 확실하지는 않지만 왜이 플래그를 전혀 건드릴 필요가 있습니까?