메모리에서 프로그램 실행 할 수 있을까요

munhoney의 이미지

혹시 간단한 프로그램을 메모리에 올려놓고 (마치 쉘코드처럼) 그것을 실행할 수 있을까요

대부분은 파일을 만들어놓고 실행하는데, 메모리에 있는 프로그램을 실행시킬려고 하는데 가능할까요?

snowall의 이미지

가장 간단한 방법이라면, 램드라이브를 사용하세요

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

munhoney의 이미지

네 감사합니다. 램디스크를 사용하는 것도 좋을 것 같긴한데요.

저는 단순하게 API만을 써서 하고 싶습니다.

혹시 API써서 사용하는 방법 아시는지요

---------------------------------
http://blog.naver.com/munhoney
---------------------------------

mhhong의 이미지

임베디드 시스템에서는 빠른 실행 속도를 위해 램디스크라는 기법으로 프로그램을 실행 시킵니다.
램을 마치 flash, HDD와 같은 디스크로 보이게 하는 기법입니다.
Initrd로 찾아보세요.

익명 사용자의 이미지

해당 머신의 바이트 코드를 만들고,

가상메모리에 복사하되, 그 가상메모리의 실행권한을 주고,

포인터를 얻어서 함수처럼 실행.

이게 될려면 이것저것 잡지식이 많이 필요하겠죠?

리눅스에서 가상메모리 실행권한 주는게 있는지는 나도 잘 모르겠는데..
윈도우는 virtualalloc 인가? 여튼 이런 비스므리한거에 page execute.. 어쩌고 있는것같던데..

가물하네

jachin의 이미지

Software Interrupt(SWI)를 추가로 만들고,
추가된 Interrupt Number에 해당하는 SWI Vector table에,
실행 코드가 저장된 메모리 위치를 등록해서
인터럽트를 발생시키는 것은 어떨까요?

munhoney의 이미지

음 ... 그렇게 되면 커널을 수정해야하는 건가요 지금 생각은 fexecve를 사용하는 방식을 고려하고 있습니다 문제는 메모리에 올라가있는 파일의 디스크립트를 어떻게 사용하느냐는 건데.... 아직그건 모르겠네요

---------------------------------
http://blog.naver.com/munhoney
---------------------------------

jachin의 이미지

파일디스크립터는 닫기 전까진 다른 데이터를 쓸 수 없을텐데, 그래도 괜찮은가요? ㅇㅁㅇ)?
그렇다면 메모리상의 가상파일시스템으로 해결하는 것이 정답일듯 싶어요. :)

munhoney의 이미지

음 ... 그렇게 되면 커널을 수정해야하는 건가요 지금 생각은 fexecve를 사용하는 방식을 고려하고 있습니다 문제는 메모리에 올라가있는 파일의 디스크립트를 어떻게 사용하느냐는 건데.... 아직그건 모르겠네요

---------------------------------
http://blog.naver.com/munhoney
---------------------------------

sj316의 이미지

ELF 로더를 만드시면 됩니다.

파일에서 읽어오는 대신 메모리에 로드된 코드를 실행하도록 하시면 될거 같습니다.

libc의 ld.so를 참고하셔도 되지 않을까 싶은데 안뜯어봐서 모르겠네요.

http://stackoverflow.com/questions/1784495/linux-user-space-elf-loader

munhoney의 이미지

네 감사합니다.

ELF 로더를 만들게 되면... 메모리에 올려진 것을 그대로 실행 할 수 있을까요? ...
음... 잘 이해가 안되어서요.. @@

---------------------------------
http://blog.naver.com/munhoney
---------------------------------

익명 사용자의 이미지

무슨 의미인지 잘 모르겠지만... 프로그램 코드가 (자신이 억세스할 수 있는)메모리상에 존재한다면 그냥 콜하면 되지 않나요?

댓글 달기

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