dlsym..에 관하여..

지나가는새의 이미지

이해할 수 없네요.. 쩝. 도움 부탁 합니다.

코드는 다음과 같습니다.

struct myStr* parse(char *str){

     struct myStr* p;
     void * handle;
     char buf[10] ;

     handle = dlopen(str, RTLD_LAZY);
     // -> str(mylib.so)는 존재하지 않습니다.

     if(handle == NULL){
          handle = dlopen(NULL, RTLD_LAZY);
     }     // ---------------------- 1.

     strcpy(buf, "myLib");  // ---------- 2
     p = dlsym(handle, buf);

     if(p == NULL)
          return -1;

     return p;
}

프로그램 상에서는 p 리턴.

질문은요, 1번에서, dlopen(NULL,...)의 이유를 모르겠구요,

man dlsym 보면 dlopen으로 연 라이브러리에서 심볼의 어드레스를 리턴한다고 되어 있고, 값이 없으면 NULL을 리턴한다고 되어 있는데, 실제로는 값이 들어가 있습니다.

2번에서는 추측이지만, 라이브러리 상의 함수이름인가요?

이거 도통 갈피를 못잡겠네요..

두번째질문은.. 만약에 dlsym을 쓰지 못한다면 어떤식으로 심볼을 얻어야 할까요.. 단순히 포인터만 얻는것과 같은건지.. 아리까리 합니다.

도움 부탁 합니다.

pynoos의 이미지

dlopen 에 처음 넣는 값은 file name이지만
그 file이 없는 경우 dlopen이 실패하고
그 경우에는 현재 돌고 있는 process image에서 symbol을
구하고자 할때 dlopen의 처음 넣는 값을 null로 합니다.

심볼이란 대개 export 된 function이나 변수명입니다.

따라서 이 예제에서는 myLib 이라는 변수명 또는 함수명을 str 이라는 파일 또는 현재 process image에서 구할 수 있겠군요.

지나가는새의 이미지

감사합니다.

만약에 dlsym을 쓰지 않는다면 어떤방법으로 myLib 을 얻을 수 있을까요..

도통 헷갈리네요..

프로세스 이미지에서 함수의 주소를 얻는다는것의 정확한 개념이 안잡히거든요..

도움 부탁 드리겠습니다.

Fever Pitch!

익명 사용자의 이미지

지나가는새 wrote:
감사합니다.

만약에 dlsym을 쓰지 않는다면 어떤방법으로 myLib 을 얻을 수 있을까요..

도통 헷갈리네요..

프로세스 이미지에서 함수의 주소를 얻는다는것의 정확한 개념이 안잡히거든요..

도움 부탁 드리겠습니다.


바이너리 파일 안에 보면 심볼명과 대응하는 주소를 적어둔 표가 있습니다. dlsym()이 하는 역할은 그 표에서 심볼명을 찾아 주소를 리턴하는 것이죠. dlsym을 쓰지 않는다면 그와 같은 기능을 직접 구현하면 됩니다(너무 당연한 얘기지만...쩝).

댓글 달기

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