ELF 포멧을 접근하기 위한 방법은 뭐가 있을까요?

parrier의 이미지

리눅스 용으로는 이미 ELF 포멧에 대한 라이브러리가 나와있는데요.

윈도우 용으로도 ELF 포멧에 관련된 라이브러리가 존재하는지요?

리눅스 용을 윈도우 용으로 바꾸어 보려고 했는데, 이게 쉽지 않다는 생각이 드네요.

그냥... 계속 바꾸어야 할까요?

bushi의 이미지

http://mr511.de/software/english.html

README 중 일부.

*** W32 Support ***
 
There is now some support for building on W32 systems (requires Microsoft
VC++).  In order to build a W32 DLL, cd into the `lib' subdirectory, edit
build.bat if necessary (it needs the path to your compiler binaries) and
run it.  If you're lucky, libelf.dll and the import/export libraries will
be built.  If not, please drop me a line.
 
I tested it on XP Pro (SP2), using VC++ 2005 Express Edition.
Apparently, Visual Studio .NET 2003 works fine as well.
 
Various notes regarding the W32 port:
 
    - When you open() an ELF file, remember to use the O_BINARY flag.
    - You may have to add /MD to the linker command line.

vc6 에서도 컴파일은 잘 되는데요.

OTL

binoopang의 이미지

ELF 바이너리를 PE 바이너리로 직접 변환하는 건가요??
엄청난 프로젝트 군요 >.<
화이팅입니다 ㅋ (드릴 수 있는 조언이 없군요 ㅠㅠ 죄송 ㅠㅠ)

-------- 시그내쳐 ---------
열심히 열심히 열심히 ..
음악을 하는것 처럼!!

parrier의 이미지

저.. PE 바이너리는 무엇인가요? ;.;

ELF 바이너리를 그냥 윈도우에서 보기 위해서, 라이브러리를 참고하려는 건데요.

그 라이브러리가 리눅스 용이라서요 ;.;

-_-v

binoopang의 이미지

ELF를 단순히 윈도우에서 보는 목적이었나요?? -ㅁ-;; (PEview 같은??)
저는 ELF 형식의 실행파일을 PE 형식으로 포팅하는 것인줄 알았습니다 ㅎㅎ

그거라면 cygwin의 elf.dll 이었던가??
그 라이브러리를 사용하면 되지 않을까 생각 됩니다 :D

-------- 시그내쳐 ---------
열심히 열심히 열심히 ..
음악을 하는것 처럼!!

chadr의 이미지

운영체제마다 "실행파일"이라고 하는 파일들의 포맷들이 다릅니다.

윈도우즈 계열에서는 PE라고 이름을 지은 포맷을 쓰며 리눅스 계절에서는 ELF라는
포맷을 사용하는 차이입니다.

각 실행파일들은 해당 운영체제에서만 실행이 되므로 운영체제와 매우 밀접하게 연관되어있으며
당연히 그냥 실행한다고 해서 실행이 되지 않습니다. 또한 바이너리를 포팅하기도 힘듭니다.

그렇기 때문에 일반적으로 서로 다른 운영체제에서 실행이 되도록 할려면 그냥 해당 운영체제에서
소스를 컴파일하여 바이너리를 재생성하는 방법을 사용합니다.

즉..

"ELF 바이너리를 그냥 윈도우에서 보기 위해서, 라이브러리를 참고하려는 건데요."
-> 그렇게 그냥은 안됩니다.
-------------------------------------------------------------------------------
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.

parrier의 이미지

훔.. 이때까지 알아낸 바에 의하면, PE로 굳이 새로 포팅을 하려는 건 아니구요.

ELF 파일을 윈도우즈 플랫폼 상에서 실행을 시키려는 것도 아닙니다.

그냥 파일의 내부 구조를 보려고 하는 것인데요. 그러기 위해서는 ELF 포멧을 알고 있거나

해당 부분을 reading하는 것이 가능하도록 함수등을 제공하는 라이브러리가 필요한 것 같아서요;.;

일단 bushi 님의 말씀처럼 libelf를 vc++에 물려보거나, cygwin의 elf.dll을 물리는 방법에

대해서 연구를 해봐야 할 것 같네요 ;.; 후움.

-_-v

parrier의 이미지

libelf.dll 파일이나 cygwin의 dll파일을 이용해서 프로그램을 짜려고 하면,

VC++ 프로젝트에서 같은 디렉토리에 넣어주고 함수를 그냥 쓰면 되는 건가요?

C문법만 아는 상태에서 VC++ 툴을 이용해서 dll을 엮을려니까 개념이 도통 잡히질 않네요.;.;

(인터넷의 글들은 다 C++ 용법에 대해서만 설명이 되어 있구요. 저는 순수 C로 짜기 위해서

W32 Console Application 으로 프로젝트를 만들었는데 말이지요.)

-_-v

chadr의 이미지

dll을 암묵적 링크를 이용하여 사용하실려면 lib파일과 헤더파일이 필요합니다.
dll의 함수를 직접 명시적으로 링크하셔도 되지만 그럴려면 또한 필요한 함수의 원형이 필요합니다.

http://www.mr511.de/software/english.html

이곳이 libelf 홈페이지이더군요. 소스도 제공하고 압축푸시면 lib폴더에 build.bat파일이 있는거보아 윈도우용으로도
컴파일이 가능하도록 구성이 되어있는듯 합니다.

이를 이용하여 컴파일 하신다음에 이용하시면 될듯합니다.
-------------------------------------------------------------------------------
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.

parrier의 이미지

컴파일을 해서 VC++에 물려서 해보고 있는데 안되네요 T_T

정확히는 dll파일과 lib 파일을 얻었는데 이를 제대로 쓰고 있지를 못합니다.

라이브러리 안에는 함수들이 있을 것이라고 생각하고 , 이를 위해서

프로젝트-속성-링커-입력 에 추가 종속성에 libelf.lib를 넣어주었고,

컴파일을 할 때 , #include를 해 주었는데...

libelf.h를 못찾는다고 계속 난리네요 T_T... libelf.h는 기존 소스에 들어있는 헤더파일인데 말이지요.

혹시 다른 분들은 해보신 분 있으시면(아님 간단하게나마 테스트라도 해주시면 감사하겠습니다 T_T)

제 접근 방법이 틀린 것 같기도 한데, 도통 이해가 잘 안가네요.

(build할 때 저는 libelf.dll이 없다는 에러도 한번 납니다 ;.; 딱히 원인 파악이 안되는데 저만 그런가요?;.;

닷넷 2003을 씁니다만. ;.; 완전 말리고 있네요 흑. )

-_-v

binoopang의 이미지

링커가 libelf.dll을 실제로 못찾아서 그럴 수 도 있겠죠
dll 파일을 소스가 존재하는 폴더에 같이 넣어주던지 아니면
dll이 모여있는 폴더에 복사한 뒤에 빌드 해보심이 ..

-------- 시그내쳐 ---------
열심히 열심히 열심히 ..
음악을 하는것 처럼!!

parrier의 이미지

혹시나 몰라서 실행 파일, 프로젝트 파일,소스 파일이 있는 곳 각각에 다 넣어봤는데도 그러네요 ;.;

그리고 인터넷에서 DLL관련 글을 찾아보면 죄다 decl(dimport)인가 뭔가를 선언해주는 등의 과정이

필요하던데요. 해당 libelf.dll에 내포된 모든 함수에 위의 decl(dimport)를 선언해주고 써야

하는 것인지.... 리눅스에서 컴파일한 결과는 libelf.a 파일 약 500k 정도인데, build.bat를 통해

(중간에 에러 한번 나옴. 그러나 어쨋든 생김) 생기는 libelf.dll은 약 70k정도.

어디서부터 접근을 해야 하는 것일까요?;.;

-_-v

댓글 달기

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