(ASM:ProgrammingGroundUp) gas형식으로 작성된걸 nasm형식 으로 변경하려고 하는데요..
글쓴이: lowid / 작성시간: 금, 2006/09/22 - 12:02오전
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 ;==>혹시 이것도 되나 해봤는데 역시 에러 발생
사실 본문 쫙올릴려고 했는데 데이상 문자가 안올라가는지라 이렇게라도 올려 보았습니다..
몇일째 삽질하는 초보.. 도와주세요 ......
Forums:
데이터 선언을 할 때
데이터 선언을 할 때 dw가 아니라 dd 입니다. long type은 dd로 선언하고 short type을 dw로 선언합니다.
그리고 mov eax,[data_items+edi+4]를 쓰시면 될 듯 합니다. 물론 그 전에 edi값이 4의 배수로 나가야 하겠지요.
ATT 형식을 INTEL
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)
감사합니다.. 첫째껀
감사합니다..
첫째껀 바이너리라고 되어있는데 그건 도스고.(exe) 소스파일은 지긍은 안받아 지는거 같네요..
(소스도 리눅스에서 컴파일 가능할지는 모르겠지만요)
셋째껀 들어가지긴 하는데.. 다운로드 링크가 깨져서.. 서버에 연결이 안되는거 같아요..
그래서 2번째꺼 intel2gas 쓰고 있는데.. 그나마 잘 컨버팅 되네요..
at 형식의 예제파일을 intel형식으로 볼려고 할때 요긴하게 쓰이겠네요
---------------------------------------------
아치리눅스좀 써주세요
-> 아치리눅스 유저 좀 꼬셔오세요. 1인당 10명!
해결 했습니다..역시
해결 했습니다..
역시 dw가 아이라 dd로 자료형을 넣어주어야 하는거 였네요..
dw는 워드,dd는 더블 워드 아닌가요??
워드라하면 32비트컴에선 4byte.. 고로 dw==4byte인줄 알았는데.. 아닌거 같군요..
(16비트랑 32이트랑 뭔가 어떡해 된거 같은데.. 점 했갈리네요)
제가 질문한 한줄짜리는 다음과 같이 번역(?) 되는군요..thyoo님이 소개해주신것로 해보았습니다..
제가 궁금한건.. at->intel 할때
오퍼랜드의 위치를 바꾸고..
괄호를 대괄호로 로바꾸고.. 하면,,
mov eax,[data_items+edi+4]정도로 바뀔줄 알았는데.. 아니네요..
덧셈이 아니라 곱셈으로 바뀌는 이유가 data_items(,%edi,4)에서 %edi앞에 (,)이 들어가서 그런건가요?
---------------------------------------------
아치리눅스좀 써주세요
-> 아치리눅스 유저 좀 꼬셔오세요. 1인당 10명!
평가
평가 고맙습니다.
세가지 다 소스 다운 받아 놓은 게 있어서 올립니다.
___________________________________
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] 가 됩니다.
댓글 달기