(질문)메모리 영역 확인하기위한 방법?

angelsoldier의 이미지

제가 Stack 메모리와 Heap메모리에 관한..글을 이곳에서 읽고
어떻게 동작하는 지 알아보고 싶어서 테스트 해봤는데
잘 안되더군요 ^^;

main()
{
outp();
}

outp()
{
int x=1;
char *s;
s=(char*)malloc(sizeof(char)*8);
s="sentence";
}

이런 소스를 구현했을때
처음에 data영역에 저장돼는 위치와 값
그리고 malloc으로 선언한 동정메모리 할당한 변수 s의
위치와 값
마지막으로 outp라는 함수가 위치한 영역이 메모리 어디에
있는지 알고 싶습니다..

메모리의 data가 시작하는 영역부터 heap에 동적메모리가
할당되서 heap이 끝나는 부분을 출력해서 값이 어디에 위치하는지
알고싶습니다 가르침 부탁드립니다.. 꾸벅

objdump라는 화일을 사용해서 어떤 방법으로 실행하면
메모리 영역이랑 값이 binary하게 출력되던데..objdump라는
화일의 소스를 알수는 없을까요??

superwtk의 이미지

MS Visual Studio 를 쓰면 간단하게 해결될것 같습니다 8)

angelsoldier의 이미지

superwtk wrote:
MS Visual Studio 를 껴?간단하게 해결될것 같습니다 8)

제가 사용하고자 하는 환경은 리눅스에서 입니다.

요즘 리눅스 책을 보면서 여러가지 익히고 있는데

그게 잘 안되네요.^^;

시작이 반이라지만 아직도 시작인가...ㅡㅡ;

ixevexi의 이미지

^^ 저도 쪽지를 읽어보았는데
잘 모르는 부분이 있어서 답변을 못드렸습니다.

다만 테스트를 좀 해보고 나서 이렇지 않을까 조심스럽게 예측 -_-을 해봅니다.

또한 위의 코드는 조금 문제가 있으므로

void outp();
int main() 
{
    outp(); 
    return 0;
} 

void outp() 
{ 
    int x=1; 
    char *s; 
    s=malloc(sizeof(char)* 10); 
    if(s)
        free(s);

    s="sentence"; 
} 

로 하는게 좋을 듯 합니다.

우선 신기한게 제가 알기로는
lower(0x8048xxx) [ 코드 | 데이터 | bss | heap | stack | 기타 ~~ | 커널 ] high(4G)
..................................................................................3G
이렇게 생겨먹었어야 하는데
의외로 코드가 0x8048xxx 에서 시작을 하더라구요

그 위로 생겨먹은건 위와 같습니다.
결론적으로 data영역에는 sentence가 저장이 되고
malloc으로 할당받은 영역은 bss영역 뒤에
여기서 bss는 없으므로 바로 데이터 다음에 오겠네요
그리고 heap의 끝나는 영역은 없습니다. 굳이 말하자면 쓰는 스택 바로전이라고 할까요?
또 outp는 코드이므로 저기 코드 부분에 들어가게 됩니다.

objdump를 쓰지 않고 printf와 %p를 쓰시면 그 변수의 주소를 아실 수 있고
마지막으로 objdump의 소스는 binutils의 소스rpm을 찾아보시면 될듯 합니다

*PS 뒤적거려보니까 0x8048xxx에서 시작하는것은
elf의 특징인것 같던데 이것에 대한 고수님들의 한말씀을 기다려봅니다

C++, 그리고 C++....
죽어도 C++

서지훈의 이미지

objdump 소스는 구글신에게 물어 보면 수도 없는 가르침을 내려 주실거고.
메모리쪽 대략적인 구성을 보실려면...
다른 문서보다도..
"stack overflow" 를 보시면은 많은 도움이 될겁니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.