{"id":19662201,"url":"https://github.com/efeslab/ironpatch_hiring","last_synced_at":"2026-06-08T22:31:24.429Z","repository":{"id":127885806,"uuid":"445938932","full_name":"efeslab/ironpatch_hiring","owner":"efeslab","description":null,"archived":false,"fork":false,"pushed_at":"2022-01-08T22:07:48.000Z","size":1,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-02-27T03:19:13.177Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/efeslab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-08T22:07:36.000Z","updated_at":"2022-01-08T22:07:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"5ebacc31-4f02-41ab-8823-8280ac7b8fb1","html_url":"https://github.com/efeslab/ironpatch_hiring","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/efeslab/ironpatch_hiring","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fironpatch_hiring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fironpatch_hiring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fironpatch_hiring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fironpatch_hiring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/efeslab","download_url":"https://codeload.github.com/efeslab/ironpatch_hiring/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fironpatch_hiring/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34083848,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-11-11T16:09:55.588Z","updated_at":"2026-06-08T22:31:24.412Z","avatar_url":"https://github.com/efeslab.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"This is a test assignment for hiring a student for Ironpatch.\nRead the paper [KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs](https://www.usenix.org/legacy/event/osdi08/tech/full_papers/cadar/cadar.pdf).\nPay special attention to section `5.5 Checking tool equivalence`:\nin this section the authors describes how they take two copies of the same software, rename all the symbols and use KLEE to compare the output.\n\nIn this challenge, you will be provided with 3 simple programs: \u003cprog1.c\u003e, \u003cprog2.c\u003e and \u003cprog3.c\u003e.\nThe goal is to find for which inputs the outputs of these programs are identical, and for what inputs they differ\nPlease follow these steps:\n1. compile all 3 programs into LLVM IR, and do not touch the source code in the next steps.\n1. write an LLVM pass to rename all the symbols in the LLVM IR. For example rename `main` from \u003cprog1.c\u003e into `prog1_main` and `main` from \u003cprog2.c\u003e into \u003cprog2.c\u003e. Feel free to use any other naming convention, as long as all symbols have different and predictable names.\n1. Create a file `main.c` that would invoke each pair of functions (for example `prog1_main` and `prog2_main`), feed them with symbolic input and compare the outputs using `klee_assert`. You might have to emulate library functions.\n1. For each pair of programs, report for which inputs the outputs are identical, and for which inputs they are different.\n\nPlease make sure to include a README with step-by-step execution instructions, a Makefile and a script to automatically run everything. Optional: include a short walk-through vide.\nThe readme (and the video) should include an explanation how the files generated by KLEE detect the inputs that generate different outputs.\nFeel free to either set-up an environment won your personal machine or use [this Virtual Box VM](https://drive.google.com/file/d/1dSolsZLJ7RS6RF61LsmKiWe2R2R7Txsp/view?usp=sharing) that has Archlinux with LLVM-10 and KLEE already installed and in the PATH of the user `mini`. (All passwords are `mini` as well).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fefeslab%2Fironpatch_hiring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fefeslab%2Fironpatch_hiring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fefeslab%2Fironpatch_hiring/lists"}