그래서 최근에 어셈블리에서 win32 호출을 호출하고 싶었고 NASM을 외부 어셈블러로 사용했습니다. call [email protected]
이 상대 점프 (0xE8 연산 코드)에 조립 한 결과는 액세스 위반했다 : 나는 다음과 같은 방법으로 내 코드에 SendMessage를 호출했다. 디버거에서 계산 된 점프 오프셋이 올바른 것으로 보였습니다. (
64 비트 OS X 컴퓨터에서 nasm을 사용하여 this OS을 컴파일하려고합니다. 그러나 어셈블러는이 코드가 32 비트가 아니라 64 비트라는 사실을 알지 못하는 데서 오는 오류를 알려주고 있습니다. 어떻게하면 코드를 수정하지 않고도이 문제를 해결할 수 있습니까? 오류는 : $ nasm kernel64.asm -o kernel64.sys
init_64
여기에 제가 실행중인 코드가 있습니다. 그것의 NASM 2.08 우분투에서 원하는 출력을 제공하지만, Red Hat 7.3 NASM 0.98.22 을 실행하는 레드햇 7.3 컴파일로 컴파일 할 때 세분화 오류를 줄 수 있습니다. 누군가가 너무 빨간 모자에 잘 실행되도록 할 수있는 방법을 말함으로써 나를 도울 수 있습니까? section .data
sec
getline 및 print_string "functions"가있는이 작은 experiement 부트 스트랩을 작성했습니다. 부트 물건은 MikeOS 튜토리얼에서 가져 왔지만 나머지는 나 자신을 썼다. 이것을 NASM으로 컴파일하고 QEMU에서 실행합니다. 실제 질문 : 저는이 변수 curInpLn을 6 행에 선언했습니다. 사용자 유형이 그 변수에 저장되고
사용자 모드 (권한 레벨 3)에서 일부 코드를 실행할 작은 OS를 작성 중입니다. 해당 사용자 수준 코드에서 메시지를 인쇄하는 OS에 다시 인터럽트를 호출하려고합니다. 지금 당장은 인터럽트 처리기가 인수 나 그와 같은 것을 어떻게 사용하는지 신경 쓰지 않고, 인터럽트 처리기에서 코드가 실행되었음을 사용자에게 알리고 싶습니다. 제 질문은 : 사용자 모드에서
x86-64에서이 상대 주소를 사용하여 다음 작업을 수행 할 수 있습니까? 내가 NASM과 OS X에이 방법을 수행 할 때 section .text
two
dq 0
section .data
one:
dq two
, 나는 다음과 같은 링커 경고를 얻을 : LD : 경고 : PIE 사용할 수 없습니다. 절대 주소 지정 ( -mdyn
각 프로세스마다 별도의 로컬 디스크립터 테이블을 사용할 작은 OS에서 작업하고 있습니다. 내 GDT에서 LDT 세그먼트를로드하려면 lldt 명령어를 사용해야 함을 이해합니다. 나는 이미 유효한 GDT로 보호 모드에서 커널을 실행시키고 있지만, LDT에 대한 GDT 항목이 어떻게 생겼는지 알 수 없다. 기본 주소가 내 LDT를 가리켜 야한다는 것을 이해하지만
좋은 참고가 필요할 수도 있지만 좋은 예가 필요할 것입니다. 내가 NASM 어셈블러를 사용하여 어셈블리에 코드를 작성하기 시작했기 때문에 필요합니다. 나는이 참조가 : 매우 좋은 유용 http://bluemaster.iu.hio.no/edu/dark/lin-asm/syscalls.html 을하지만, 다른 레지스터의 필드를 설명하지 않기 때문에 그것은 많은
나는 어떤 종류의 어셈블리에서도 프로그래밍에 익숙하지 않다. 그리고 리눅스 용 NASM 타입 어셈블리가 DOS 기반 어셈블리에 비해 비교적 간단하다고 들었 기 때문에 나는 그것을 시도하기로 결정했다. 이 내 프로그램은 지금까지입니다 : section .data
opening: db 'Opening file...',10
openingLen: