(ASM:ProgrammingGroundUp) gas형식으로 작성된걸 nasm형식 으로 변경하려고 하는데요..

lowid의 이미지

ProgrammingGroundUp보구서 질문 올립니다.

data_items:                         
    .long 3,67,34,222,45,75,54,34,44,33,22,11,66,0 0
 
movl data_items(,%edi,4), %eax

를 nasm에 쓸수 있게 어떻게 바꾸나요..

아래와 같이 해보았지만 안되네요..

data_items라는 list(배열?) 에서 edi레지스터로 count한다음 그걸루 한 워드(4byte)만큼
이동시켜서 다음 인자를 eax레지스터에 mov하는 건데요..(배열참조 같이...)
위에 코드부분이 오류인거 같아서 저것만 올려놓았습니다..

data_items:
     val dw 3,67,34,222,45,75,54,34,44,33,22,11,66,0
 
mov eax,[data_items+edi+4]
;==>컴파일은 잘 되지만 실행 결과가 잘 안나옴
 
mov eax,data_items[edi+4]
;==>그나마 있는 masm책을 참조해서..제일 맞는문법(?) 같은데 에러 발생.
 
mov eax,data_items[edi]+4
;==>혹시 이것도 되나 해봤는데 역시 에러 발생

사실 본문 쫙올릴려고 했는데 데이상 문자가 안올라가는지라 이렇게라도 올려 보았습니다..
몇일째 삽질하는 초보.. 도와주세요 ......

익명사용자의 이미지

데이터 선언을 할 때 dw가 아니라 dd 입니다. long type은 dd로 선언하고 short type을 dw로 선언합니다.
그리고 mov eax,[data_items+edi+4]를 쓰시면 될 듯 합니다. 물론 그 전에 edi값이 4의 배수로 나가야 하겠지요.

thyoo의 이미지

ATT 형식을 INTEL 형식으로 바꿔주는 툴입니다.

http://www.bumba.net/~hmaon/a2i/
http://www.niksula.hut.fi/~mtiihone/intel2gas/
http://www.blah.ch/att2intel/

찾아 놓기만 하고 안써봤는데,
돌려 보시고 비교 평가해 주시면 고맙겠읍니다.
___________________________________
Less is More (Robert Browning)

___________________________________
Less is More (Robert Browning)

lowid의 이미지

감사합니다..
첫째껀 바이너리라고 되어있는데 그건 도스고.(exe) 소스파일은 지긍은 안받아 지는거 같네요..
(소스도 리눅스에서 컴파일 가능할지는 모르겠지만요)
셋째껀 들어가지긴 하는데.. 다운로드 링크가 깨져서.. 서버에 연결이 안되는거 같아요..
그래서 2번째꺼 intel2gas 쓰고 있는데.. 그나마 잘 컨버팅 되네요..
at 형식의 예제파일을 intel형식으로 볼려고 할때 요긴하게 쓰이겠네요

---------------------------------------------
아치리눅스좀 써주세요
-> 아치리눅스 유저 좀 꼬셔오세요. 1인당 10명!

lowid의 이미지

해결 했습니다..
역시 dw가 아이라 dd로 자료형을 넣어주어야 하는거 였네요..

val dw 3,67,34,222,45,75,54,34,44,33,22,11,66,0
==>
val dd 3,67,34,222,45,75,54,34,44,33,22,11,66,0

dw는 워드,dd는 더블 워드 아닌가요??
워드라하면 32비트컴에선 4byte.. 고로 dw==4byte인줄 알았는데.. 아닌거 같군요..
(16비트랑 32이트랑 뭔가 어떡해 된거 같은데.. 점 했갈리네요)

제가 질문한 한줄짜리는 다음과 같이 번역(?) 되는군요..thyoo님이 소개해주신것로 해보았습니다..

movl data_items(,%edi,4), %eax 
==> mov eax,[data_items+edi*4]

제가 궁금한건.. at->intel 할때
오퍼랜드의 위치를 바꾸고..
괄호를 대괄호로 로바꾸고.. 하면,,
mov eax,[data_items+edi+4]정도로 바뀔줄 알았는데.. 아니네요..
덧셈이 아니라 곱셈으로 바뀌는 이유가 data_items(,%edi,4)에서 %edi앞에 (,)이 들어가서 그런건가요?

---------------------------------------------
아치리눅스좀 써주세요
-> 아치리눅스 유저 좀 꼬셔오세요. 1인당 10명!

thyoo의 이미지

평가 고맙습니다.

세가지 다 소스 다운 받아 놓은 게 있어서 올립니다.
___________________________________
Less is More (Robert Browning)

___________________________________
Less is More (Robert Browning)

익명사용자의 이미지

글 설명만 보고 답글을 달았더니 배수 연산 부분에 오류가 있었던걸 못봤군요.

AT&T : section:immed32(base, index, scale)
Intel : section:[base + index * scale + immed32]

입니다.

movl data_items(,%edi,4), %eax은 base 부분이 생략되었으므로 + 0 으로 해석되어
mov eax, [data_items + 0 + edi * 4] 가 됩니다.

댓글 달기

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