할당된 메모리인지 확인

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) 하면 안되나요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.