메모리 주소값 알아오는 방법 질문입니다...

zippiest의 이미지

C에서 작성한 프로그램의 변수나 함수의 메모리 주소를 알아오는 방법을 알고 싶습니다..

예를들어

#include

int main()
{

int s=5;
printf("%d"s);

return 0;

}

이런 프로그램을 작성하고 실행했을때

여기에 s 라는 변수가 올라가 있는 메모리의 주소값을 알고 싶습니다..

물론 VC 같은 툴로 디버깅 해보면 알 수 있겠지만...

메모리 주소값을 읽어올 수 있는 프로그래밍 방법을 알고 싶습니다...

지금 간단한 디버거를 만들려고 생각중이라서요.....

부탁 드립니다...

swiri15의 이미지

주소연산자 &와 메모리번지 포맷 %p를 이용하시면 됩니다

간단한 예입니다.

int k;

printf("address of local variable k : %p\n", &k);

zippiest의 이미지

네 답변감사합니다...
제가 질문에 중요한 사항을 빼먹었군요....
제가 알고 싶은것은.. 소스를 컴파일한 실행파일을 실행해 실행중인 파일.. 소스를 모르는 상태에서...
각 변수들이 저장된 메모리의 스택주소를 추출하는 방법을 질문한것이었습니다~~
아무튼 감사해요...

bootmeta의 이미지

일단 소스 파일내의 변수나 관련 디버깅 정보등은 컴파일러 마다 다르게 구현합니다.
(컴파일러가 아니라 플랫폼 표준 형태로 구현된 경우가 있을 수도 있습니다.)
최소한 gcc와 vc, bolanc c 등의 구현이나 스펙이 제각각이라 현재 사용하는 컴파일러와 디버거 관련 문서를 참고하셔야 할 듯합니다.
일반적인 관점에서 이야기하기에는 구현이 전부 다르기 때문에 쉽게 답할 수 없는 문제입니다.

chadr의 이미지

디버깅 심볼이 없는 상태에서 알아내기는 힘듭니다..
소스에 보이는 변수 이름은 단순히 사람이 보기 편한 인식자이므로
컴파일후 실행파일에 디버깅 심볼이 들어가있지 않으면 알수가 없습니다.

디버거도 이 디버깅심볼을 이용하여 추적을 하니까요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

zippiest의 이미지

아... 죄송하지만 또 질문 드릴께요..ㅋㅋ

리눅스 실행포맷인 ELF 파일에서 물론 디버깅정보가 추가된 ELF 파일입니다...

이 ELF 파일을 보면 .debug_info 라는 섹션에 각 디버깅 심볼이 저장되어 있는걸 확인했거든요...

그런데 만약 .debug_info에 어떤 함수심볼이 저장되어 있다면 이 함수가 call 되기전 return 주소도

.debug_info 섹션에 저장되어 있나요??

댓글 달기

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