{"id":21312617,"url":"https://github.com/williamkosasih19/jit-nasm","last_synced_at":"2026-05-19T01:32:19.433Z","repository":{"id":80157163,"uuid":"532526468","full_name":"williamkosasih19/jit-nasm","owner":"williamkosasih19","description":"Just In Time NASM. Assemble and run instructions in memory, immediately","archived":false,"fork":false,"pushed_at":"2022-10-19T14:30:47.000Z","size":1465,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-22T10:11:53.995Z","etag":null,"topics":["asmjit","assembler","assembler-x86","assembly","c","compiler","jit","jit-assembler","x86","x86-64"],"latest_commit_sha":null,"homepage":"","language":"Assembly","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/williamkosasih19.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-04T11:57:40.000Z","updated_at":"2023-10-22T07:15:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"f8947c73-e989-4460-9593-e03dc3693ca6","html_url":"https://github.com/williamkosasih19/jit-nasm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkosasih19%2Fjit-nasm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkosasih19%2Fjit-nasm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkosasih19%2Fjit-nasm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkosasih19%2Fjit-nasm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/williamkosasih19","download_url":"https://codeload.github.com/williamkosasih19/jit-nasm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243790999,"owners_count":20348385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asmjit","assembler","assembler-x86","assembly","c","compiler","jit","jit-assembler","x86","x86-64"],"created_at":"2024-11-21T17:35:11.795Z","updated_at":"2026-05-19T01:32:14.409Z","avatar_url":"https://github.com/williamkosasih19.png","language":"Assembly","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Just In Time NASM\n\nAssemble your assemble listings and call it instantaneously within your program.\n\n## Build\n\nTo build jit-nasm, simply run the command\n\n`$ ./autogen.sh`\n\n`$ ./configure`\n\n`$ make` \n\ninside the code directory.\n\n## Install Library\n\nTo install the jit-nasm library, do the following after building\n\n`$ sudo make install PREFIX=/usr/local`\n\nto install libjitnasm in /usr/local/lib\n\n## Usage\n\nTo link your code with jit-nasm, use -ljitnasm\n`$ gcc your_code.c -ljitnasm`\n\n### Instantiate Library\nTo initialize library, first do the following\n```\n#include \u003cjit-nasm.h\u003e\n\njit_nasm_t jnasm = jit_nasm_create_instance(NULL, 0);   // interface: jit_nasm_create_instance(pointer to buffer, buffer size). These two parameters are used for external buffer. Default value is NULL, where jit-nasm will allocate the buffer used to assemble instructions internally.\n```\n\n### Assemble Instructions\nTo assemble instructions, do the following after initialization\n```\njit_nasm_t jnasm = jit_nasm_create_instance(NULL, 0);\njit_nasm_assemble(jnasm, \"mov rdx, 0x14fff\\n\"\n                         \"mov rax, 4\\n\"\n                         \"cmp rax, 3\\n\"\n                         \"je label_1\\n\"\n                         \"add rax, 34\\n\"\n                         \"label_1: xor rax, rdx\\n\"\n                         \"imul rax, rax\\n\"\n                         \"idiv rdx\\n\"\n                         \"ret\\n\", 0, NULL);   // interface: jit_nasm(jit-nasm struct pointer, code to assemble, argc, argv). argc and argv are used by nasm for more advanced control over the program. Defaults to 0 and NULL.\n                         \n```\n\n### Getting Pointer to Assembled Code\nAfter assembling your code, you can do the following to execute it.\n```\njit_nasm_t jnasm = jit_nasm_create_instance(NULL, 0);\njit_nasm_assemble(jnasm, \"mov rdx, 0x14fff\\n\"\n                         \"mov rax, 4\\n\"\n                         \"cmp rax, 3\\n\"\n                         \"je label_1\\n\"\n                         \"add rax, 34\\n\"\n                         \"label_1: xor rax, rdx\\n\"\n                         \"imul rax, rax\\n\"\n                         \"idiv rdx\\n\"\n                         \"ret\\n\", 0, NULL);  \nvoid (*func)() = jit_nasm_get_code(jnasm);   // Cast value to a void function pointer\nfunc();   // Call the code.\n```\n\n\n## Hello World Example\nDemo located in the demo/ folder\n\n```\n#include \u003cstdint.h\u003e\n#include \u003cstddef.h\u003e\n\n#include \u003cjit-nasm.h\u003e\n\nint main() {\n  const char* msg = \"Hello World!\\n\";\n  char* code = \n    \"mov rdx, rsi\\n\"\n    \"mov rsi, rdi\\n\"\n    \"mov rax, 1\\n\"\n    \"mov rdi, 1\\n\"\n    \"syscall\\n\"\n    \"xor rax, rax\\n\"\n    \"ret\\n\";\n\n  jit_nasm_t jnasm = jit_nasm_create_instance(NULL, 0);\n  jit_nasm_assemble(jnasm, code, 0, NULL);\n\n  void (*hello_world)(char*, int) = jit_nasm_get_code(jnasm);\n  \n  hello_world(msg, 13);\n\n  jit_nasm_destroy_instance(jnasm);\n}\n\n```\n\noutputs\n\n`Hello World!`\n\n\n\n\nOriginal NASM Readme Below\n\n\n\n---\n\nNASM, the Netwide Assembler\n===========================\n\n[![master](https://travis-ci.org/netwide-assembler/nasm.svg?branch=master)](https://travis-ci.org/netwide-assembler/nasm)\n\nMany many developers all over the net respect NASM for what it is:\na widespread (thus netwide), portable (thus netwide!), very flexible\nand mature assembler tool with support for many output formats (thus netwide!!).\n\nNow we have good news for you: NASM is licensed under the \"simplified\"\n[(2-clause) BSD license](https://opensource.org/licenses/BSD-2-Clause).\nThis means its development is open to even wider society of programmers\nwishing to improve their lovely assembler.\n\nVisit our [nasm.us](https://www.nasm.us/) website for more details.\n\nWith best regards, the NASM crew.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamkosasih19%2Fjit-nasm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliamkosasih19%2Fjit-nasm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamkosasih19%2Fjit-nasm/lists"}