0
등록 :동일한 스택 포인터를 사용하는 두 개의 프로세스. 왜? ESP를 인쇄하려면 다음 코드를 사용하여
#include <stdio.h>
#include <stdlib.h>
unsigned long get_sp() {
__asm__("movl %esp, %eax");
}
int main() {
sleep(5);
printf("Stack pointer (ESP): 0x%x\n", get_sp());
return 0;
}
안 ASLR
echo "0" > /proc/sys/kernel/randomize_va_space
빌드 :
gcc get_sp.c -o get_sp
실행 두 개의 프로세스 :
./get_sp & ./get_sp
받았어요 :
Stack pointer (ESP): 0xbffff158
Stack pointer (ESP): 0xbffff158
나는 다른 주소를 기대하고있었습니다. 누구든지 이것에 대해 밝힐 수 있습니까? 이것이 가상 메모리 주소이고 후드 리눅스가 프로세스 당 메모리를 추적하고 주 메모리에 올바르게 매핑되기 때문입니까? 이러한 가상 메모리 주소입니다 및 후드 리눅스는 프로세스 당 메모리를 추적하고 메인 메모리에 제대로 매핑 있기 때문에
감사
모든 프로그램은 실제 주소가 아닌 '가상 주소 공간'을 가지고 있기 때문에 페이지 파일이 작동하는 것을 허용합니다. 가상 주소와 실제 주소 공간이 분리되어있어 프로그램의 주소가 동일하게 유지됩니다 방대한 스팟들 (그리고 디스크에 현재 스왑 아웃 된 스팟들)을 참조하십시오. 또한 프로그램이 제대로 프로그램되지 않아서 서로의 추억을 '못쓰게'할 수 없음을 의미합니다. Windows 3.1 및 Windows 95를 기억하십시오. 충돌하는 게임 하나가 전체 컴퓨터를 다운시킨 곳입니까? – Patashu