-3
왜 다음 코드가 실행 오류를 일으키는 지 궁금합니다.왜 실행 오류가 발생합니까?
#include <stdlib.h>
int main(void) {
asm("pushf\norl $ 0x40000, (%esp)\npopf\n");
*((int*) (((char*) malloc(5)) + 1)) = 23;
return 0;
}
감사!
왜 다음 코드가 실행 오류를 일으키는 지 궁금합니다.왜 실행 오류가 발생합니까?
#include <stdlib.h>
int main(void) {
asm("pushf\norl $ 0x40000, (%esp)\npopf\n");
*((int*) (((char*) malloc(5)) + 1)) = 23;
return 0;
}
감사!
아마도 AFAIK로 보호 된 정렬 검사 플래그가 수정 중이기 때문일 수 있습니다. 또는 malloc()이 정렬 된 영역을 반환하고 액세스가 정렬되지 않았기 때문에? 확실하지는 않지만 왜이 플래그를 전혀 건드릴 필요가 있습니까?
Q : 디버거에서 밟았을 때 무엇을 발견 했습니까? Q : 귀사의 플랫폼은 무엇입니까? 컴파일러? 나는 리눅스와 GCC를 추측하고 있지만, 모르겠다. 정확히이 코드로 무엇을하려고 하는가? – FoggyDay
EFLAGS [(자세히)] (http://stackoverflow.com/questions/548164/mis-aligned-pointers-on-x86)에서 정렬 검사 비트를 설정하고 정렬되지 않은 32 비트 값을 쓰려고합니다 주소. BTW, '실행 오류'는 매우 모호합니다. 실제 오류가 더 유용 할 것입니다. –
'sizeof (int)'가 8보다 큰 경우, 할당 할 수있는 메모리가 충분하지 않다. – chux