먼저 당신이 당신의 툴체인 명령을 할 수 코드 이외의 아무것도 추가를 포함하지 할 필요 (GCC를?) 솔루션을 발견했다. -nostartfiles -nodefaultlibs
~ gcc
과 같은 것이 작동합니다.
다음은 Linux
으로 잘 작업해야합니다. 즉, 엘프가 os에 의해 올바르게로드되어야 함을 의미합니다. 즉, _start
포인트가 표시되어야 함을 의미합니다. 당신은 당신이 원하는 무엇을 포함 main
를 만들 수 있습니다
void _start() __attribute__ ((naked));
void _start() {
main();
asm volatile(
"mov r7, #1\n" /* exit */
"svC#0\n"
);
}
: 다음은 그러한 예가 될 것입니다.
int main() {
linuxc('X');
return 42;
}
그리고 쓰기 콜에 추가하고 ...
void linuxc(int c) {
asm volatile(
"mov r0, #1\n" /* stdout */
"mov r1, %[buf]\n" /* write buffer */
"mov r2, #1\n" /* size */
"mov r7, #4\n" /* write syscall */
"svC#0\n"
: /* output */ : [buf] "r" (&c) : "r0", "r1", "r2", "r7", "memory"
);
}
나는 my github에서 그보다 완전한 예제를 가지고있다. 나는 teensy을 가장 좋아한다.
잘 모르겠다. 그것은 syscall에서 errno에 관한 것이지만 팔 인라인 어셈블리를 사용하여 syscall을 수행하는 기능을 요구하고있다. –
같은 질문을 읽고 있습니까? 그 중 하나에서 errno에 대해서는 아무 것도 보이지 않지만 SVC {} {
참조 : [Thumb as'_start'] (http://stackoverflow.com/questions/20369440/can-start-be-the-thumbfunction); 같은 대답으로 다른 질문. –