저는 Assembly in x86에서 프로그래밍을 시작하고 있습니다. 저는 리눅스 가상 머신에서 가스를 사용하여 컴파일하고 있습니다. 메인 루틴이 프로그램을 즉시 종료하는 간단한 빈 프로그램을 실행하려고합니다. 이것이 제가 따라하는 가이드의 첫 번째 임무입니다. 내 코드는 파일 hello.s에 저장하고이처럼 보이는 : gcc -o hello.o hello.
작은 컴파일러 프로젝트에서 작업하고 있는데 스택의 값 대신 스택 위치의 주소를 푸시하는 방법을 알아낼 수 없습니다 위치. 내 목표는 정수 값을 보유하는 스택 위치 주소를 인쇄하는 C 함수의 void 포인터로 푸시하는 것입니다. 내 궁극적 인 목표는 함수에서 포인터 정수 연산을하는 것입니다. 런타임 라이브러리 확장에서 C 함수를 호출하는데 성공했지만 문제는
목표가 트랩 (PUTS)을 모방 한 서브 루틴을 작성하고 콘솔에 문자열을 쓰는 것입니다.이 문자열 addres는 r0으로 가정 할 수 있습니다. 이것은 내가 지금까지 가지고있는 것인데, 첫 번째 문자 's'에 대해 작동합니다. 이후 루핑 인쇄를 계속합니다. >>>>>> ive는 모든 제안을 시도 했습니까? .orig x3000
lea r0, string
그래서 나는이 코드 조각이 : 다음 // This is supposed to be used in order to dump "DummyFunc" in a file. Using a simple fwrite() call once we get the data inside the function.
int DummyFunc(LPVOID, LPVOID)
{
매핑 된 캐싱을 직접 수행하기 위해 일부를 이해하는 데 어려움이 있습니다. 나는 2KB 다이렉트 - 맵 캐시를 가진 64KB 메모리를 가진 바이트 어드레싱 메모리 시스템을 가지고있다. 캐시 블록은 32 바이트입니다. 제가 잘못하면 2048B/32B = 64 캐시 블록이 있습니다. 각 캐시 항목 (태그, "더티"비트 등)에 필요한 총 비트 수를 알아야합니다.
화면에 메시지 만 쓰는 자체 키보드 인터럽트 처리기 (DOS 사용)를 작성하려고합니다. 키보드를 누르지 않으면 다른 메시지가 끝없이 인쇄됩니다 (따라서 프로그램을 정상적으로 중지 할 방법은 없지만 중요하지는 않습니다). MYTASK 루틴의 DOS 라인 인터럽트가 흐릿 해지면 인터럽트 핸들러는 잘 작동하지만 주석 처리가 해제 되었기 때문에 프로그램이 충돌
나는 내 학교의 보안 프로젝트를하고있다. 이 프로젝트의 경우 바이너리가 있으며,이 바이너리의 의사 코드를 만들고 익스플로잇을 수행해야합니다. 더 잘하려면 ASM 나는 정확히 같은 소스 코드를 c에서 처리하려고합니다. 나는 edx에 문제가있다. 0x080484a5 <+41>: mov edx,0x8048468
이 전체의 주요 코드 : Dump of asse
다른 문자를 밀어 넣는 많은 push 명령어를 작성해야합니다. 나는 그것을 위해 매크로를 사용하고 싶다.이 %macro push_multi 1-* ; Accept between 1 and ∞ arguments
%assign i 1
%rep %0 ; %0 is number of arguments
push %{i}
어셈블리에서 파일에서 바이트를 읽은 후 현재 파일 위치가 업데이트됩니다. 해당 바이트를 수정하고 읽은 동일한 위치의 파일에 쓰기보다는 어떻게 할 수 있습니까? 단순히 [0] 읽기 바이트의 ASCII 코드로 다시 파일을 쓰기보다 번호를 추가, x8086 READ_LOOP:
MOV AH,3FH
MOV BX, HANDLE
MOV CX,