메모리를 어떻게 보나요???

inviolable의 이미지

메모리 상에 어떤 내용이 있는지 보는 방법이 어떻게 되나요???

올리디버거 같은 프로그램도 메모리에 있는 내용을(스택, 레지스터, 문자열 공간) 보여주는데 원리가 어떻게 되는지 궁금합니다.

또한 이 부분에 대해 자세히 알려면 무엇을 공부해야되는지 궁금합니다.

simminjo의 이미지

말그대로 입니다.
운영체제를 공부하시고 운영체제가 제공하는 API의 체계를 공부하시면 됩니다.
올리디버거도 결국은 운영체제의 api를 이용하는 어플리케이션에 불과하니까요..
물론 원리를 이해하려면 윈도우즈 운영체제의 동작원리에 대해서 알아야겠지만요?

흔한 말로는 리버싱을 공부하면 말씀하시는 영역에 도달하는것으로 알고있습니다.

---------------------------------------------------------------
Opensource에 기여하는 것이 꿈입니다.
내가 만든 코드를 모두가 사용할 때 까지~

inviolable의 이미지

운영체제 공부할 때, 메모리 영역이(가상 메모리) 운영체제 영역, 응용프로그램 영역 등등으로 나누어져 있는 걸로 아는데, 메모리를 보는 것에 대한 권한이 필요하든지 보안 때문에 못 읽도록 되어있는 메모리 영역은 없는 건가요???

snowall의 이미지

어쨌든 운영체제를 공부하세요

피할 수 있을때 즐겨라! http://melotopia.net/b

익명 사용자의 이미지

제가 쓸려던 글을 써주셨군요..

왜 어쨋든 운영체제를 공부해야 하는지는 운영체제를 공부해보시면 알게됩니다....

sohn9086의 이미지

개인적으로는 디버거를 만들려면 운영체제보다는 CPU 아키텍쳐와 바이너리 포맷에서 빠삭해야 한다고 생각합니다.

세상에는 MMU를 탑재하지 않은 프로세서가 존재하고, MMU를 탑재한다고 하더라도 그것을 이용하지 않는 OS도 많습니다. 주로 임베디드겠죠.
하지만, 그런 환경에서도 디버깅은 해야합니다.
실제로 gdb같은 경우 OS가 존재하지 않는 임베디드 환경에서도 GDB remote serial protocol만 구현해 주변 디버깅할 수 있습니다.

http://www.embecosm.com/appnotes/ean4/embecosm-howto-rsp-server-ean4-issue-2.html

브레이크 포인트를 지정하는 경우를 예로 들자면, 유저가 소스 코드의 어떤 장소에 브레이크 포인트를 지정했을 때, 해당 주소에 있던 명령을 디버거가 관리하는 메모리에 백업해 둔 후, 그 자리에는 소프트웨어 인터럽트를 발생시키는 명령을 써 버립니다. 그리고, 프로그램을 돌려서 Program Counter가 그 위치에 도달하면 인터럽트가 발생하겠죠. 그러면 백업해둔 메모리 내용을 가지고 원래 있어야 할 명령으로 복구시킵니다.
(모든 디버거가 브레이크 기능을 다 이렇게 구현하였다는 얘기는 아닙니다. 하드웨어 브레이크 포인트를 지원하는 CPU 아키텍쳐에서는 좀 더 쉽게 구현할 수도 있을 것입니다.)

심볼을 참조하여 메모리를 조사할 경우(변수명 등)에는 디버거가 심볼 정보를 읽어들여야 할 필요가 있고, gcc에서 -g 옵션을 붙이는 이유는 그 때문이죠.
스택, 레지스터는 그냥 해당 레지스터 값만 알면 볼 수 있죠.

생산적인 댓글을 달자

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.