어셈블리 책들보면 컴퓨터 어셈블리 거의 95%이상이 x86용이라고 하는데요.
인텔사에서도 AMD사에더도 x86 버젼으로 찍어낸다고 하더군요.
1. x86의 정확한 개념이 뭔가요?
2. 컴퓨터용으로 x86말고 다른게(?) 있나요?
--------------------------------------------------------------------
x86이란 인텔에서 만든 프로세스 번호를 통칭해서 가리키는 것입니다.
8086, 80286, 80386, 80486 등이 모두 ...86으로 끝납니다.
이를 모두 x86으로 나타냅니다.
하지만 보통이야기 하는 것은 32비트 프로세서인 펜티엄 프로세서를 나타냅니다.
64비트와 구분해서 (비록 64비트 cpu라 할지라도 32비트 모드로 사용가능합니다)
32비트라는 것을 나타낼경우에 x86이라고 합니다.
윈도우7 64비트의 경우 x86이라는 프로그램 파일즈 가 생기는 경우가 있는데
이것도 64비트 실행코드가 아니라, 32비트 실행코드라는 것을 나타냅니다.
****************************************************************************************
1. NASM,MASM같이 다른 종류의 어셈블러들은 문법 규칙이 거의 비슷한 수준인가요?
(c언어 같은경우 비주얼 스튜디오 DEV-C 거의 같은 수준인것처럼)
2. NASM,MASM이던 사용법은 약간 달라도 최종 기계어 (010101)은 같죠??
-----------------------------------------------------------------------------
NASM, MASM은 상당히 다릅니다.
최종적으로 생성되는 기계어는 같지만, 어셈블리어의 소스는 상당히 다릅니다.
가장 차이가 나는것이 피연산자의 순서가 반대방향입니다.
add a,b 라고 했을 때 b가 a에 더해져서 결과가 a가 되느냐?
아니면 a가 b에 더해져서 결과가 b가 되느냐... 의 방식으로 두 어셈블리어가 차이가 있습니다.
하지만 조금만 익숙해지면 양쪽을 자유롭게 오고가는데 전혀 문제가 없습니다.
***************************************************************************************
리버싱은 어셈블리와 무슨 관계가 있나요?
----------------------------------------------------------------------------
리버스엔지니어링은 원래는 실행화일을 역으로 분석하는 것을 하지않고
그 기능만으로 부터 소프트웨어를 제작해 내는 기법을 가리키는 것입니다.
가장 유명한 역사적 리버스 엔지니어링은 콤파크(Compaq)사에서 IBM PC의 BIOS를
리버스엔지니어링으로 그 기능을 그대로 구현해 낸 것입니다.
그래서 범용 PC의 시대를 연 것입니다. 이때 사용한 기법은 다음과 같습니다.
한 방에서 PC BIOS의 기능만을 철저해 조사해서 그 소스, (어셈블리어로 분석해낸)를
알려주지 않고 그 기능(하는일)만 다른 방에 있는 프로그래머, 개발자에게 알려줍니다.
다른 방에 있는 개발자, 프로그래머는 자신들 만의 힘으로 대체 BIOS를 짜다가 의문이 나는점이
있으면 분석팀이 있는 방에 문의를 합니다. 그래서 분석팀은 또 그 기능을 조사하고는
말로(언어로) 새롭게 알아낸 기능을 알려 줍니다.
이런방식으로 철저하게 BIOS의 소스(어셈블리어, 역어셈블한 것)을 보지 않고 개발해 내었습니다.
이것은 IBM과늬 소송에 대비한 것이었고, Compaq사가 자사의 BIOS를 개발해 내자 IBM은
Compaq사를 고소했읍니다. 하지만 법정에서는 Compaq사가 사용한 개발방법을 인정하고는
IBM이 패소했습니다.
위의 이야기에 나오는 방식의 리버스 엔지니어링은 어셈블리와 관계가 있지만,
또 직접 관계는 없다고 말할수 있습니다.
하지만 일반적인 리버스 엔지니어링이란 대규모 상업적 용도로 사용하는 것이 아니라
개인이나 작은 회사에서 상대방의 소프트웨어의 어떤 기능을 복사하려고 하거나,
아니면 게임같은 것을 크랙해서 제한없이 사용하려고 하는 경우에 많이 사용합니다.
이때는 실행화일을 역어셈블리해서 어셈블리어로 바꾸어 놓고는 이를 분석하게 됩니다.
그렇게 때문에 어셈블리어를 모른다면 리버싱을 하지 못한다고 보겠습니다.
글도 읽을줄 모르면서 소설을 읽겠다는 것고 마찬가지 이기 때문입니다.
***************************************************************************************
MASM,NASM 말고 어셈블리 컴파일러중에선 또 어떤게 있나요?
----------------------------------------------------------------------------
There are: Nasm, Tasm, GoAsm, Masm, Gasm and maybe some others.
You can look them up from Google.
Frankly, I`d say Fasm is the best pick, but it`s up to you..
[1] Fasm
http://en.wikipedia.org/wiki/FASM
http://flatassembler.net/
[2] 2번 HLA
http://en.wikipedia.org/wiki/High_Level_Assembly
[3] 3번 Gas
http://en.wikipedia.org/wiki/GNU_Assembler
[4] 4번 Nasm
http://en.wikipedia.org/wiki/Netwide_Assembler
[5] 5번 Jwasm
http://en.wikipedia.org/wiki/Open_Watcom_Assembler
'기타 > 컴퓨터공학' 카테고리의 다른 글
프로그래머가 되려면? (0) | 2012.07.04 |
---|---|
float형 연산하고나서 오차나는이유가 뭔지알려주세요 (0) | 2012.07.02 |
소수가 포함된 10진수를 2진수 16진수로 (0) | 2012.03.16 |
0.6십진수를 8비트와 16비트로 변환시 발생된 오차 (0) | 2012.03.12 |
임베디드 프로그래밍이란 정확히 무엇인가요? (0) | 2012.03.03 |