어셈블리로 작성된 해체 앱을 사용하려고합니다. Linux, x64 : $ objdump -d my_app
my_app: file format elf64-x86-64
그래, 맞아. 그게 뭐가 잘못 됐어? 몇 줄의 코드가 단순한 hello world이 아니라 약 200 줄의 코드입니다. $ gdb -q my_app
Reading symbols fro
"ELF 실행 파일 3"은 x86 실행 파일을 만듭니다. "ELF64 실행 파일 3"은 x64 실행 파일을 만듭니다. 그러나 x32 (32 비트 포인터가있는 x64) 실행 파일을 어떻게 만들 수 있습니까? https://en.wikipedia.org/wiki/X32_ABI p.s. "실행 파일"다음에 나오는 "3"은 무엇을 의미합니까?
스택에 로컬 변수를 만들었거나 문자열 대신 메모리를 할당 했으므로 값을 입력하고 싶습니다. 내가 할 방법을 undertand에 할 strcat(my_str1, "something1");
strcat(my_str1, get_var2());
strcat(my_str1, "something3");
strcat(my_str1, get_var4());
그
커널을 만들 때 전화 명령에 도움이 필요합니다. 플랫 어셈블러를 사용하여 커널을 빌드하고 있습니다. call fs:bx
가능합니까? 플랫 어셈블러에서 "잘못된 피연산자 크기"오류가 발생합니다. 은 내가 call 1000h:0h
을 할 수있어하지만 내가 원하는 것이 아니다. 누군가이 질문에 대한 답을 갖고 있습니까?
레이블 주소를 얻으려면 어떻게해야합니까? 내가 추가 코드를 예를 추가하지 않고 평면 어셈블러에서 라벨의 ADRESS을 얻으려면 : label1: ;is at adress 0
db 1h,2h,3h,4h,5h ;some data
label2: ;is at adress 5 because label1 has 5 bytes of data
내가 콘솔 화면으로
일부 조작을 통해 ret op와 관련된 문제점을 해결했습니다. 나는 call이 반환 주소를 스택에 푸시한다는 것을 알고있다; 그것을 터뜨리고 다시 밀어 넣는 것은 불법입니까? format ELF64 executable 3
entry start
segment readable executable
start:
pop rcx ; argc
플랫 어셈블러를 사용하여 어셈블리에 작은 부팅 가능 OS를 만들었습니다. 나는 그것을 PulsarOS라고 부른다. 그러나, 나는 그것에 대한 타이핑 프로그램을 만들고 싶다. 제가 말했듯이, 그것은 모두 x86 어셈블리에 있습니다. 사용자가 입력 할 수있는 곳으로 간단하게 입력하고 입력 한 텍스트가 화면에 표시됩니다. 여기에 코드가 있습니다. 비교적 간단한,
나는 fasm을 사용하여 fasm과 함께 제공되는 매크로를 사용하는 dll을 컴파일하고 있는데, 전처리 기 이후 출력이 무엇인지보고 싶지만 이진 스테이지 전에 출력하고 싶습니다. 이것을 볼 방법이 있습니까? 매크로에 대한 종속성을 제거하는 것이 가치가 있는지 확인하기 위해 생성되는 내용을 빨리 확인하고 싶습니다. "매크로 풀다", 소스를 컴파일 매크로 호출