Skip to content

Instantly share code, notes, and snippets.

@kuzux
Created November 14, 2023 19:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kuzux/b7f3f943dc58f53519d7bcaff1836193 to your computer and use it in GitHub Desktop.
Save kuzux/b7f3f943dc58f53519d7bcaff1836193 to your computer and use it in GitHub Desktop.
osx raw syscall on arm
#define STDOUT 1
#define SYS_WRITE 4
int strlen(const char* str) {
int len = 0;
for(const char* cur = str; *cur; ++cur) ++len;
return len;
}
int write(int fd, const char* buf, int count) {
register int _retval asm("x4");
register int _syscall_no asm("x16") = SYS_WRITE;
register int _fd asm("x0") = fd;
register const char* _buf asm("x1") = buf;
register int _count asm("x2") = count;
__asm__ (
"svc #0x80\n"
"mov x4, x0"
: "=r"(_retval)
: "r"(_fd), "r"(_buf), "r"(_count), "r"(_syscall_no)
);
return _retval;
}
int putc(char c) {
return write(STDOUT, &c, 1);
}
int puts(const char* str) {
int len = strlen(str);
return write(STDOUT, str, len);
}
int putd(int n) {
char buf[32];
char* cur = buf + 31;
*cur = 0;
if(n == 0) {
--cur;
*cur = '0';
} else {
while(n) {
--cur;
*cur = '0' + (n % 10);
n /= 10;
}
}
return puts(cur);
}
int main() {
int rc = puts("Look ma, no headers!\n");
puts("rc = ");
putd(rc);
putc('\n');
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment