x86 어셈블리에 대한 표준 책이 있습니까? [닫은]


25

조립에 관한 책이 많이 있습니다. 그러나 일반적으로 MIPS 또는 ARM과 같이 관심이없는 ISA를 처리합니다. 나는이 아키텍처를 다루지 않는다. 내가 배우려고 할 이유가 없습니다.

그러나 x86 어셈블리 북은 존재하지 않는 것 같습니다.

예를 들어 Windows Portable Executable 파일을 생성하는 장난감 컴파일러를 작성하려고한다고 가정 해 봅시다.

모범 사례, 설계 방법론 및 x86 어셈블리에 대한 기타 유용한 정보를 설명하기위한 사실상의 표준 인 책이 있습니까? 그 책은 어떻습니까?


어셈블리 경험이 어느 정도입니까? 간단한 C 프로그램을 어셈블리로 컴파일하고 코드를 다시 C 프로그램으로 리버스 엔지니어링하기 위해 최적화없이 GCC를 사용해 보셨습니까?
Brian

10
@Brian : 그렇게하기 전에 어셈블리를 알아야합니다.
Billy ONeal

x86 명령어 세트의 사본을 보았습니다. 2 권이며 아마도 내가 본 것 중 가장 큰 책일 것입니다. 재미있게 보내세요 :)
AngryBird

2
빌리, 만약 당신이 전혀 어셈블리를 모른다면, 그들 중 하나는 일반적인 아이디어를 얻기 위해 시작하는 것이 좋습니다. 어셈블리는 아키텍처에 매우 가깝기 때문에 어셈블리 지침은 아키텍처 별 디자인을 크게 반영합니다. x86 어셈블리로 시작하여 Kip Irvine의 "Intel 기반 컴퓨터의 어셈블리 언어"를 읽었습니다. 이 책은 실제로 커뮤니티 칼리지의 온라인 수업과 짝을 이루었습니다. 어떤 종류의 학습자가 있는지 잘 모르겠지만 학습에 가장 적합한지도 강의를 찾으십시오.
Brian

@ 브라이언 : "그들 중 하나"는 무엇을 의미합니까? 나는 "그들"이 무엇인지 이해하지 못한다 – 어떤 책? 어셈블러? ISA? 이미 MIPS 어셈블러와 함께 연주했습니다. 그래도 x86에서 아무것도 찾을 수 없습니다.
Billy ONeal

답변:


18

내가 사용하는 86 프로세서 용 어셈블리 언어를 내가 대학에 이해하기 매우 쉽게 그것을 발견 할 때 교과서로. 나는 더 오래된 4 번째 판을 가지고 있고 그것을 6 번째 판과 비교했고 많은 변화를 알아 차리지 못했다. 사람들은 자신의 I / O를 위해 자신의 라이브러리를 사용하는 것에 대해 불평하지만, 후반에서 "어려운"방법을 수행하는 방법을 알려줍니다.


1
아주 좋은 책!
Coder

"Intel 기반 컴퓨터의 어셈블리 언어"라는 제목의 Irvine 책 5 판을 읽었습니다. :)
Brian

1
제 2 판의 대부분은 저자의 난해한 시스템 High Level Assembly에 특화되어 있기 때문에 이것은 매우 나쁜 제안이라고 생각합니다. 기본 어셈블리는 C의 개자식 버전입니다. 나는 출판 된 첫 번째 판을 읽은 적이 없습니다. 그의 사이트에서 무료로 찾을 수 있고 게시 된 적이없는 dos 버전은 대단한 읽기입니다. 또한 약 50 % 더 길며 HLA ( 전체 시간 낭비)에 대한 정보가 부족 합니다.
Evan Carroll

1
@EvanCarroll 혼란 스러워요. 잘못된 책에 대한 링크를 변경 한 후 링크를 ​​변경 한 책을 비판했습니다. 의도하지 않았습니까?
Merlyn Morgan-Graham

1
내 실수 야 @ MerlynMorgan-Graham 그것을 잡아서 수정하는 데 좋습니다.
에반 캐롤


9

The Art of Assembly Programming 은 x86 프로그래밍에 대해 꽤 많은 훌륭한 자료입니다.

x64 ABI 설명서 도 유용합니다. AMD 웹 사이트에있는 버전으로 연결되는 링크를 찾으려고했지만 더 이상 찾을 수없는 것 같습니다.

학습하는 동안 상당히 도움이 될 수있는 것은 어셈블리에서 처음부터 완전한 앱을 작성하는 대신 C (또는 다른 컴파일 된 언어)로 대부분의 앱을 작성한 다음 어셈블리 코드 덩어리를 호출하는 것입니다. 그. 이 작업을 마치면 반전하고 어셈블리 프로그램을 작성하여 C 함수를 호출하십시오.

편집 : 오타가 수정되었습니다.


1
또 다른 제안 : C로 간단한 프로그램을 작성하고 어셈블리로 컴파일하고 어셈블러가 어셈블 할 수 있도록 정리 한 다음 어셈블리 버전을 향상시킵니다. 최소한의 기능 (키보드에서 읽기, 콘솔에서 쓰기)을 빠르게 수행 할 수있는 좋은 방법입니다.
TMN

4

x86 어셈블리를 배우기에 매우 좋은 책은 Pentium 프로세서 최적화 도구 입니다. 이 책의 주요 초점은 어셈블리 코드의 최적화에 있지만 Pentium 어셈블리를 진행하는 데 도움이되며 참고 자료이기도합니다.

인쇄가 오래되었지만 사용하기가 어렵지 않습니다.

"어셈블리 코드 최적화 프로그램"이 포함 된 플로피 디스크와 함께 제공됩니다. 실제로 코드를 최적화하지는 않지만 파이프 라인 중단과 같은 비 효율성이있는 위치를 나타내는 주석 처리 된 목록을 생성합니다.

책과 함께 제공되는 도구는 저자의 회사가 판매했던보다 기능이 뛰어난 제품의 제한된 버전이지만, 오랫동안 익숙하지 않은 이유가 있습니다. 이유를 모르겠습니다. 그런 도구가 핫케익처럼 팔릴 것이라고 생각합니다.

x86은 다른 마이크로 프로세서 모델에 의해 지원되는 많은 변형이 있기 때문에 일반적으로 매우 복잡한 주제입니다. 기본 사항을 알고 나면 인텔 또는 AMD 데이터 북을 참조하여 정확한 칩을 찾으십시오. 불행히도 한 CPU 모델에서 빠르게 실행되는 코드는 다른 칩에서 빠르지 않을 수 있습니다.


실제로 성능을 추구하지는 않습니다. 바이너리를 생성하고 싶을뿐입니다. 여전히 살펴볼 것이다 :)
Billy ONeal

2
어셈블리 opcode뿐만 아니라 특정 어셈블러를 사용하는 방법도 배워야합니다. 각 어셈블러는 완전히 다르게 작동합니다. 많은 어셈블리 코드를 작성하려면 인간 코더를 염두에두고 개발 된 masm을 사용하십시오. 인라인 어셈블리의 작은 조각을 작성하려는 경우 GNU와 함께 gcc를 (가스라고도 함) 인라인 어셈블리로 사용할 수 있습니다. GNU as '구문은 masm과 완전히 다릅니다. gcc의 백엔드로 주로 사용하기 위해 작성된 것처럼 실행 코드 생성을 수행하기 때문에 인간 코더가 원하는 많은 기능을 제공하지 않습니다.
마이크 크로포드

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.