할당된 메모리인지 확인

dalmagi의 이미지

안녕하세요.

프로세스 내부 또는 외부에서 읽어온 임의의 메모리 영역이 할당된 상태인지 아닌지 알 수가 있나요?

이를테면 역분석 할 때,

어떤 구조체에 대한 포인터 주소는 확인 했지만 그 구조체의 실제 크기가 얼마나 되는지 모르는 경우..

알 수가 있는 것인지라도 알고 싶습니다.

drinkme의 이미지

질문의 내용과 일치하는지는 모르겠지만...

보통, malloc() 등으로 memory block을 할당할 경우,
memory block 바로 이전부분에 MBR(memory block record, 뭐... 명칭은 나름 다를수 있겠죠)
를 만들고 여기에 각종 정보, 이를테면, memory block 크기, 다름 block의 address 등...
뭐.. 여타 정보를 넣어놓습니다.

free()할 경우, 이 정보를 참고하여, 크기를 판단하고 해제하고 그렇게 하죠.

platform이나, memory block의 종류, 뭐.. .기타 등등에 따라서 구현방법이 상이합니다.

dalmagi의 이미지

아 그런거군요. 이제 뭘 공부해야 할 지 알겠네요. 감사합니다.

화이팅(fighting) 말고 화이트닝(whitening) 하면 안되나요.

nineye의 이미지

해제된 메모리에 대한 메모리 초기화는 대부분 하지 않는데...
이미 해제된 메모리에 남아있는 메모리 블럭 정보를
잘못 읽어올 수도 있을 것 같은데요?

_________________________________________________________

nineye's blog

drinkme의 이미지

구현하는 것마다 틀립니다.
MBR에 유효성여부를 넣는 경우도 있고요.
전체 heap내에서의 link에서 빼는 경우도 있고...

nineye의 이미지

구현하는 것마다 틀리다는 것은,
new를 오버로딩해서 구현 자체를 바꾼다는 의미이신가요?
힙 메모리를 관리하는 방식은 시스템마다 정해져 있을텐데...
큰 블럭을 할당해 놓고, 그 블럭내에서 다시 chunk단위로 메모리를 주는
메모리 관리 모듈을 만든다면 블럭 정보를 직접 컨트롤 할 수 있을 것 같기도 한데..
하지만 처음 질문 하신분의 의도는 다른 프로세스의 힙메모리 정보까지 보시는 것을 원하는 것 같던데,
그럼 이런 유저 메모리 관리 모듈은 의미가 없을 것 같네요.

_________________________________________________________

nineye's blog

jick의 이미지

힙 메모리는 user process 영역이므로 이를 어떻게 관리하는가는 원칙적으로 "시스템(OS)"의 영역이 아닙니다. 물론 대부분의 프로그램이 표준화된 라이브러리를 이용할 것이므로 (Linux라면 glibc) 동일한 방식으로 돌아갈 확률이 높습니다만 꼭 그래야 되는 건 아닙니다.

dalmagi의 이미지

헛 시스템영역의 문제가 아니라 언어별 메모리관리자 라이브러리의 문제라는 말씀이시군요.

그렇다면 다른 프로세스의 메모리 영역에 대한 분석을 시도할 때, 그 방법의 수가 대단히 많아지는 것 맞죠.

저는 각 OS별 메모리관리 방식에 대한 이해만 있으면 일단 가능할 줄 알았는데 아닌가보네요;

화이팅(fighting) 말고 화이트닝(whitening) 하면 안되나요.