CORREREPOLLINO

Sponsor Team



C.R.G. SERVICES S.R.L.
VERONA


az. 600GROTTE-Chiaromonte


Commerciale Lucana
Senise






Gemi Aspiratori


nasm 예제

NASM 또는 Netwide 어셈블러는 어셈블리 코드를 캐터 코드 개체 파일로 전환할 수 있는 x86 컴파일러입니다. 개체 파일이 있으면 연결하고 최종 실행 파일을 만들 수 있습니다. 이 예제는 MinGW 도구 체인이 설치된 유닉스 시스템 또는 Windows를 위한 것입니다. 데비안 시스템에서는 nasm 패키지와 함께 설치할 수 있습니다. 아래 코드를 hello.asm 에 넣어 Netwide 어셈블러 (NASM)는 “인텔의 하지만 덜 복잡 한 비슷하게 간단 하 고 이해 하기 쉬운 설계 된 구문을 사용 합니다. 즉, 피연산자 순서는 GNU 어셈블러에서 사용하는 AT&T 스타일과 는 달리 src입니다. 예를 들어 nasm이 있는 gdb를 사용하는 경우 명령을 실행하여 gdb를 인텔 스타일 디스어셈어를 사용하도록 설정할 수 있습니다. 예를 들어, 프로그램을 어셈블, 링크 및 실행하려면 다음을 수행해야 합니다. 이 예제는 cygwin에서 실행되었으며 Windows 명령 프롬프트에서 링크 단계가 다를 수 있습니다. 이 예제에서는 ld를 호출할 때 -e 명령줄 옵션을 사용하여 프로그램 실행을 위한 진입점을 지정합니다. 그렇지 않으면 _WinMain@16을 _start가 아닌 진입점으로 사용해야 합니다. 마지막으로 WriteConsole()은 cygwin 콘솔 내에서 잘 작동하지 않으므로 출력을 보려면 Windows 명령 프롬프트 내에서 최종 EXE를 실행해야 합니다. 이렇게 하면 Linux에서 Windows로 이동하려면 최소한의 소스 코드 변경과 약간 다른 어셈블 및 링크 단계가 필요하다는 장점이 있습니다.

Windows 세계에서 이것은 연결 단계가 Windows 명령 프롬프트 및 cygwin에서 동일할 추가 이점이 있습니다. 몇 가지 주요 변경 사항이 있습니다: 위의 예에서, 우리는 eax에 숫자 4를 이동 한 다음 시스템 인터럽트 int 80h를 호출합니다. 우리는 항상 같은 인터럽트를 호출하지만, 우리가 레지스터에 넣어 어떤 값에 따라, 다른 일이 발생합니다. 리눅스는 우리가 사용하는 것 외에 시스템 호출의 번호를 제공합니다, 4, 이는 쓰기 호출에 해당. 우리는 STDOUT에 쓰기, 또한 파일 설명자 1로 알고 있지만, 우리는 또한 2 (STDERR) 또는 하드 디스크 또는 네트워크 소켓에 텍스트 파일의 파일 설명자에 쓸 수 있습니다. STDIN은 파일 설명자 0으로, 작성하지 않고 읽습니다. 읽기를 수행하기 위해 eax에 넣어야 할 가치를 알 수 있습니까? 힌트 : 그것은 당신이 아래의 링크에서 찾을 수있는 sys_read 시스템 호출에 대한 값입니다. STDIN에서 읽기 위해 변경해야 할 다른 사항은 무엇입니까? 아래 표는 사용 가능한 시스템 호출과 각 레지스터에서 예상되는 매개 변수를 보여 주며 있습니다. 빈 값이 있는 레지스터는 사용되지 않습니다.

리눅스 시스템 콜 차트를 확인하십시오. 아래에서 간단한 Hello 월드 예제를 통해 nasm 프로그램의 기본 구조를 배치합니다. 몇 가지 주요 차이점이 있습니다. . 변수는 데이터 섹션을 정의하고 코드는 텍스트 섹션으로 이동합니다. 우리는 안녕하세요 세계 문자열과 그것의 길이를 정의합니다. 그런 다음 인쇄를 위한 시스템 호출을 나타내는 번호가 eax 레지스터로 이동됩니다.

Comments are closed.