그냥 궁금합니다. 우분투 9.10에서는 gcc/gdb를 사용합니다. 종종 오브젝트 파일의 디스 어셈블리를 제공하는 C 서적을 읽습니다. 1 월에 책을 읽을 때, 나의 분해는 책과 매우 흡사합니다. 이제는 상당히 다릅니다. 아마도 최적화 된 것입니다. (최소한 내가 확인한 파일에서 적어도 최적화 된 모양으로 어셈블리 코드에서 재 배열을 보았습니다.) 첫 번째
선생님이 스택의 주소와 다른 레지스터의 내용을 확인하기 위해 줄 단위로 선생님에게 준 바이너리 파일을보고 싶습니다.하지만 gdb 사용에 익숙하지 않습니다. C 코드를 가지고 있지만 바이너리 파일에서 완전히 작업해야합니다. 여기에 지금까지 사용했던 명령은 다음과 같습니다 나에게이 메시지를 제공 (gdb) file SomeCode
: Reading symb
에서 피연산자를 취득 : mov esi, offset off_A
cmp esi, offset off_B
어떻게 런타임시 오프셋 (두 번째 피연산자)를 얻을 것? (런타임에 프로세스에 주입) 프로그램의 결과로 자신의 몇 가지와 오프셋을 대체 :이 시나리오 mov esi, offset off_X
cmp esi, offset off_Y
이 프로
그래서 내가하고 싶은 것은 다른 프로세스의 가상 메모리에있는 알려진 메모리 주소에서 값을 읽는 루비 프로그램을 만드는 것뿐입니다. 메모리에서 실행중인 프로세스의 x86 어셈블리를 16 진수 편집에 대한 기본 지식과 연구를 통해 원하는 메모리의 값에 대한 기본 주소와 오프셋을 찾았습니다. 나는 그들을 바꾸고 싶지 않다. 나는 단지 그것들을 읽고 싶다. 나는
내 어셈블리를 다시 작성하는 중입니다. 그 동안 분해를 구현하는 것에 대해 궁금합니다. 간단하고 컴팩트하게 만들고 싶습니다. 그렇게하면서 익숙하게 사용할 수있는 개념이 있습니다. opcode에서 나머지 x86 명령어 인코딩을 결정할 수 있습니다 (접두사 바이트도 필요합니다.). 나는 많은 사람들이 그것을하기위한 테이블을 작성했다는 것을 알고있다. 거기에 실
프로그램을 표현하고 실행하기위한 저수준 프로세스를 확실하게 이해하고 싶습니다. 개체 파일 정보 (헤더, 섹션 등)를 구문 분석하고 표시하는 프로그램을 작성하여이 작업을 수행하기로 결정했습니다. 나는이 부분을 거의 끝냈다. 자연스러운 확장은 나머지 관련 데이터를 어셈블리 명령어로 디 컴파일하는 것입니다. 처음에는 x86에 초점을 맞 춥니 다. 이 디 컴파일