2014-01-24 2 views
0

x86 어셈블리 코드 스 니펫 (전체 프로그램 아님)을 해당 바이너리 기계 코드 스 니펫으로 자동 변환 할 수 있습니까? 예를 들어어셈블리 코드 스 니펫을 이진 기계 코드 스 니펫으로 변환하는 방법은 무엇입니까?

:

xor eax, eax 
mov [ebx + 12], eax 

로 :

31 c0 
89 43 0c 

정말에만 바이트의 일련의 대응 필요. 일반적으로 참조를 설정하고 수동으로 번역하는 몇 가지 지침을 조사해야하지만, 자동으로 수행하는 일부 프로그램이 있음을 확신합니다.

그런 도구를 알고 계시다면 이름을 말해 주시거나 링크를 공유하십시오.

+1

이것은 거의 이해가되지 않습니다. 어셈블러는 첫 번째 스 니펫과 마찬가지로 opcode 니모닉을 사용합니다. 그리고 바이트를 생성합니다. "Visual Studio assembler"라는 제품이 없습니다. –

+0

Ok 죄송합니다. 결과 코드가 VS 실행 파일 (예 : 주입 가능)과 호환되어야한다는 것을 의미했지만 물론 어셈블러에서 기계어로의 번역은 하나뿐입니다. – eclipse

+0

'dumppe.exe' 파일을 찾고 계십니까? 방법에 대한 내 대답은 [이 질문에 대한 개요를 사용하여 (http : // stackoverflow.co.kr/questions/18466658/get-back-the-assembly-level-code-exe-files/18471761)? _ (나는 표를 벗었을지도 모르기 때문에 그 모든 것을 쓰고 싶지 않다) _ – James

답변

1

문제점을 해결했습니다. Windows 플랫폼에서 작동하며 Visual Studio와 함께 사용되는 ML64 어셈블러를 사용합니다. 나는이 템플릿으로 template.asm 파일을 만든 :

ml64 /c template.asm 

nop 명령은 내가 바이트 검색하는 프로그램을 작성할 수 있습니다 0x90로 번역되는 것을 알고 :

.code 

main proc 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 

; ------------------------------------------- 
; enter assembly code here 
; ------------------------------------------- 

    mov [ebx + 12], eax 
    xor eax, eax 

; ------------------------------------------- 

    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
main endp 

end 

은 그 때 나는 그것을 컴파일 10 x 0x90 바이트의 두 블록 사이.

0

나는 두 가지 어셈블러 알고 : NASM

어셈블러의 여러 표기법 변종이 있습니다 MASM은, 지금까지의 내가 아는 한 MASM은 VS 구문에 더 호환됩니다.

어셈블리에서 기계 코드를 생성합니다. 16 진수 바이트를 보려면 원하는 16 진수 편집기를 사용하십시오.

나는 지금까지 Windows에서 NASM으로 만 작업 했으므로 VS 통합에 대해 말할 수는 없지만 일반적으로 사용하는 도구는 어셈블러 여야합니다.

+0

도움을 주셔서 감사합니다. 귀하의 대답은 정확히 제가 찾던 것이 아니었지만 어셈블러를 사용하여 직접 코드를 컴파일하고 코드를 쉽게 찾을 수 있도록 일부 코드 마커 (내 대답에 명시된 지시 사항을 추가)에 영향을주었습니다. 감사! – eclipse

0

나는 이와 비슷한 상황이있었습니다. 내 솔루션은 gcc 툴체인에서만 작동합니다.

의 당신이 그 일을 할 다음, code.s에서 어셈블리를한다고 가정 해 봅시다 : 당신이 당신의 조립 지침을 것이다 output.bin에서

$ gcc -c code.s && ld -o output.bin code.o --oformat=binary -Ttext=0 2>/dev/null && rm code.o 

합니다. 당신이 16 진수 형식으로하려는 경우 (단 xxd 리눅스 작동, 또는 시스템) 다음 작업을 수행 할 수 있습니다 : 당신은 그것에 대해 fasm을 사용할 수 있습니다

$ xxd -p output.bin 
0

. 자체 코드가 포함 된 자체 스 니펫을 바이너리 파일로 컴파일 할 수 있습니다. 꽤 유용합니다.

관련 문제