2016-10-04 7 views
0

어셈블리 또는 x86/x64 코드를 JavaScript로 컴파일 할 수 있습니까?JS로 FASM/MASM 컴파일

또는 asm -> llvm-ir -> js?

UPD : 그래서 내 마지막 질문은 다음과 같습니다 I가 ASM 목록 (발췌)

push %rbp 
mov %rsp,%rbp 
sub $0x10,%rsp 
mov 0x5e41(%rip),%eax 
lea 0x601a(%rip),%rdx 
cltq 
movzbl (%rdx,%rax,1),%eax 
test %al,%al 
jne loc_0040121b 
movl $0x0,-0x4(%rbp) 
jmp loc_00401206 

내가 emscriptten의 도움이나 다른 도구를 사용하여 수정없이 브라우저에서 실행할 수는?

+1

결과가 어떻게되어야합니까? – Ped7g

+0

사실 asm은 컴파일되지 않으며 어셈블됩니다. JS에서 기계를 에뮬레이션하려면 기존 어셈블러의 바이너리 출력을 사용하는 것이 더 쉽습니다. –

+0

@ Ped7g 원문 소스 코드에 액세스하지 않고 브라우저에서 실행 파일 (작은 프로그램)을 실행하고 싶습니다. – OwnageIsMagic

답변

0

내가

그래서 원래의 소스 코드에 액세스하지 않고 브라우저에서 실행 (작은 프로그램)를 실행하려면, 당신은 실제로 당신이를 가지고 있지 않는 한, JS에 어셈블리를 컴파일하고 싶지 않아 출처. 어쨌든 말이 안되기 때문에 어떤 것이 좋을까요? asm은 고수준 언어와 같은 변수가 아니며 플랫폼에 영향을 미칩니다. 기본적으로 명령은 플랫폼의 상태를 많이 바꿀 수 있습니다. "변수"는 다음과 같습니다. 액세스 가능한 메모리 전체

가 의미있게하는 방법을하는 방법입니다 :

당신은 이미 일부 대상 플랫폼 (CPU + OS) 준비 일부 기계 코드를 실행하고자합니다.

"브라우저에서"(직접적으로) 불가능합니다. 브라우저는 해당 CPU의 기계 코드를 처리하지 않으며 OS API/ABI/syscall도 제공하지 않습니다. 이 실행 파일에는 대상 OS가 필요하므로 명령에 원하는 효과가 있습니다.

JS로 작성된 해당 OS의 에뮬레이터를 실행하고 에뮬레이터 내에서 이진 파일을 실행할 수 있습니다. 웹 온라인 dosbox (예 : 브라우저에서 오래된 DOS 게임을 실행하고 합리적인 속도와 최악의 정확도로 실행하며 대부분은 실제로 재생 가능하며 원하는대로 볼 수 있습니다.)

대상 플랫폼의 에뮬레이터를 만드는 방법은 너무 광범위한 질문이며 경우에 따라 수십 년 동안 다소 노력이 필요합니다. 그러나 이미 운좋게도 타겟 OS의 에뮬레이터가 존재하며 JS 포트와 라이센스를 사용하여 사용할 수 있습니다.

또한 두 번째 옵션이 있습니다. 정말 작은 프로그램 인 경우 JS 및 OS/브라우저에 무관하게 다시 작성하는 것이 더 쉽습니다.


편집 : 대한 기계 코드 -> LLVM IR :

이의이 "아니오"단순히 가정 해 봅시다. (물론 기계 코드의 50 %는 번역하기가 쉽지만, 나머지 절반은 코드가하는 일을 번역사가 완전히 이해해야한다는 것을 의미합니다. 이는 완전히 NP 문제이거나 전혀 불가능합니다.

+0

내가 OS를 실행하는 등의 경우에 과잉이라고 생각 느낌,하지만 어떻게 든 나는 : – OwnageIsMagic

+0

@OwnageIsMagic : 잘 .. 네. 이제는 기계 코드가 libc를 전혀 호출하지 않아도되며 HW/OS에 직접 액세스 할 수 있다고 생각하십시오. – Ped7g

+0

해당 프로그램이 모든 interupts/syscals (명시 적) – OwnageIsMagic