리눅스에서 간단한 버퍼 오버플로 공격을 시도하고 있습니다. 명령 줄 인수를 허용하는 취약한 프로그램이 있습니다. 나는 (보통 shellcode) 실행하고 싶은 코드를 가진 환경 변수를 설정하는 또 다른 프로그램을 가지고있다. 이제 취약한 프로그램의 버퍼를이 환경 변수의 주소로 오버플로하려고합니다. 내가 명령 줄 인수로 환경 변수를 전달할 때, 내 취약한 프
버퍼를 인수로 취하는 시스템 호출 write이 있다고 가정 해 보겠습니다. 이 버퍼 메모리는 사용자 주소 공간의 일부입니다. 쓰기 호출이 어떻게 더 성공합니까? 전체 버퍼가 커널 공간에 복사되고 프로세스가 선점되고 다른 프로세스에 CPU가 주어지고 새로운 프로세스가 다른 시스템 호출을 실행한다고 가정하면 버퍼를 덮어 쓸 수 있습니다 이전 write 호출 중
리눅스에서는 세그먼트의베이스가 모두 0이기 때문에 논리 주소가 선형 주소와 일치합니다 (Book "Understanding the linux kernel"). 나는 서로 다른 프로세스의 논리 주소가 같아서 서로 다른 프로세스의 선형 주소가 동일 할 수도 있고 각 프로세스가 4GB를 볼 때마다 각 프로세스가 자체의 선형 주소 공간 (로컬 주소 공간)을 가질
Windows에서 프로세스의 주소 공간을 검사하고 있습니다. 사적인 영역의 내용을 볼 때, 너무 많은 제로 바이트 (일부 지역에서는 95 % 이상)가 있기 때문에 궁금합니다. 응용 프로그램이 실행되는 동안 사적 영역이 더 이상 사용되지 않으면 왜 그들은 예약되었거나 무료가 아닌가? 감사합니다.
인텔 및 AMD 설명서에 따르면 64 비트 모드의 경우 가상 주소에는 실제로 48 비트 만 사용할 수 있으며 48 비트에서 63 비트는 비트 47 (부호 확장)을 복제해야합니다. 지금까지 내가 아는 한, 모든 현재의 CPU는이 방법으로 구현되지만, 이론적으로는 향후 구현에서 사용 가능한 공간을 확장하는 것을 금지합니다 (그리고 이것은 바이너리 호환성을 손상
클래스에 액세스 할 때 클래스가 프록시 역할을 할 수 있습니까? 가장 간단한 방법은 물론 getters/setter를 작성하는 것입니다. 그러나 이것은 코드를 확장하는 모든 setter를 직접 작성해야하기 때문에 유연하지 않고 불분명합니다. 문제는 일부 데이터가 마이크로 컨트롤러의 progmem에 있다는 사실을 추상화하려는 것입니다. 기본적으로 나는 Mem
나는 "fork()"에 익숙하다. fork()가 현재 (호출 중) 프로세스의 정확한 복사본을 호출 할 때 어디서나 읽을 수있다. 다음 코드를 실행하면, 두 개의 다른 프로세스가 있어야한다. 두 개의 서로 다른 메모리 위치가 해당 변수 및 함수에 할당됩니다. #include<stdio.h>
int i=10;
int pid;
int main(){