{"id":30832,"date":"2026-05-01T01:59:12","date_gmt":"2026-05-01T01:59:12","guid":{"rendered":"https:\/\/academicwritersbay.com\/solutions\/your-quilt-within-the-lizard-legion-was-once-blown-and-youve-been-revealed-as-a-double-agent-and-driven-out-it-was-once-all-very-james-bond-whereas-you-raze-whisper-so-yourself-and-what-a-brave-un\/"},"modified":"2026-05-01T01:59:12","modified_gmt":"2026-05-01T01:59:12","slug":"your-quilt-within-the-lizard-legion-was-once-blown-and-youve-been-revealed-as-a-double-agent-and-driven-out-it-was-once-all-very-james-bond-whereas-you-raze-whisper-so-yourself-and-what-a-brave-un","status":"publish","type":"post","link":"https:\/\/academicwritersbay.com\/solutions\/your-quilt-within-the-lizard-legion-was-once-blown-and-youve-been-revealed-as-a-double-agent-and-driven-out-it-was-once-all-very-james-bond-whereas-you-raze-whisper-so-yourself-and-what-a-brave-un\/","title":{"rendered":"Your quilt within the Lizard Legion was once blown, and youve been revealed as a double agent and driven out! It was once all very James Bond, whereas you raze whisper so yourself, and what a brave underground helicopter get away it was once however you fe"},"content":{"rendered":"<p>Overview<br \/>Your quilt within the Lizard Legion was once blown, and youve been revealed as a double agent and driven out! It was once<br \/>all very James Bond, whereas you raze whisper so yourself, and what a brave underground helicopter get away it was once however<br \/>you&#8217;re feeling lucky to contain escaped with your pores and skin. (Literally\u2026 they&#8217;d contain aged you to make a human suit!)<br \/>Now that youre help on the outside, youve been tasked with establishing a plan to enable final resistance<br \/>fighters silent all thru the Lizard Legion to clandestinely glide records help to your organization with out elevating<br \/>suspicion. As of unhurried, members of the Lizard Legion contain found the PC traditional DOOM, and it has change into<br \/>your whole rage to form contemporary mods for it at headquarters, so your group has decided to bid mods for this title as a<br \/>automobile for exfiltration. By burying encrypted bits within textures and assorted sport records blocks, records could perchance also be<br \/>hidden within innocuous WAD (Wheres The total Info) files.<br \/>On this project, you are going to put in pressure a userspace filesystem daemon utilizing the FUSE (Filesystem in UserSpacE)<br \/>API to access records in WAD structure, the atypical aged in a vary of traditional PC sport titles (collectively with DOOM<br \/>and Hexen). On this well-known early prototype, you have to contain been tasked with imposing learn and write access to<br \/>files and directories all thru the WAD files as a proof-of-thought. As such, you are going to want to put in pressure learn and<br \/>write functionality for both files and directories within your FUSE-based mostly program. We, as your comrades-inarms<br \/>battling the Reptilian invasion, will provide sample WAD files to uncover the functionality of your<br \/>implementation. (The resistance is counting on you!) The resistance makes bid of university classes as quilt for<br \/>typical operations, so youll put up the project by capability of Canvas.<br \/>Structure<br \/>The project is broken into three major parts:<br \/>1) Produce a library to learn from and write to WAD files and manufacture a directory and file building from them.<br \/>2) Put into effect a userspace daemon (by capability of FUSE) to access the directory building once mounted.<br \/>3) Take a look at your implementation by navigating the mounted directory, examining the names and file contents, and<br \/>collectively with directories and files of your luxuriate in.<br \/>Whereas proper implementation could perchance also fluctuate, the daemons parameters must match these laid out on this doc, and<br \/>the directory building, naming, and file contents must silent be properly offered by capability of the filesystem.<br \/>File Format<br \/>The WAD file structure comprises records in three sections: the header, which presents total layout records,<br \/>the descriptors, which listing parts within the file, and the lumps, which contain the records themselves. NOTE:<br \/>all numbers are in miniature-Endian structure and, where relevant, are designated in bytes! Since Reptilian stores<br \/>its variables in memory in miniature-Endian structure as properly, it&#8217;s no longer wanted to develop any byte-recount inversions<br \/>when discovering out in or writing records, however this is silent well-known records to take hold of.<br \/>File Header<br \/>The header comprises the file magic, descriptor count, and region (offset) of the descriptors within the file:<br \/>The magic for a wad file is once in a while ASCII and continually ends within the suffix \u201cWAD\u201d (e.g., \u201cIWAD\u201d or \u201cPWAD\u201d).<br \/>It is also well-known to reward that the descriptor listing, origin at the feature indicated by the descriptor<br \/>offset, is continually located at the head of the WAD file.<br \/>Descriptors<br \/>The files descriptors contain records about parts within the WAD file its file offset, length, and<br \/>identify:<br \/>Some parts could contain explicit naming conventions that will differentiate them from long-established bid material<br \/>files. These marker parts will doubtless be interpreted by the daemon as directories and could perchance also be displayed<br \/>accordingly within the filesystem (see below).<br \/>Lumps<br \/>Substances within the WAD structure are saved as lumps described by the descriptors. These lumps will doubtless be<br \/>represented within the filesystem by the daemon as particular person files that will perchance also be opened, learn, and closed.<br \/>You could no longer write to reward lumps, however you are going to be establishing empty files whose lumps you contain<br \/>to write to.<br \/>Marker Substances<br \/>There are two main forms of marker parts in WAD files, every of which must silent be interpreted as<br \/>directories by our daemon. The variety entails plot markers and namespace markers.<br \/>Draw marker names are of the structure \u201cE#M#\u201d, where # represents a single decimal digit (e.g., \u201cE1M9\u201d).<br \/>They&#8217;re followed by ten (10) plot element descriptors. The parts for the subsequent 10 descriptors must silent be<br \/>placed inside of of a directory with the maps identify. Draw marker directories can no longer contain files or directories<br \/>added to them.<br \/>Namespace markers come in pairs. A namespaces origin is marked with a descriptor whose identify has<br \/>the suffix \u201c_START\u201d (e.g., \u201cF1_START\u201d), and its ending is marked with a descriptor whose identify has the<br \/>suffix \u201c_END\u201d (e.g., \u201cF1_END\u201d). Any descriptors for parts falling between the origin and ending<br \/>markers for a namespace must silent be placed within a directory with the namespaces identify (e.g., \u201cF1\u201d).<br \/>The namespace marker\u2019s identify, with the exception of the suffixes, obtained&#8217;t ever exceed two characters. These will doubtless be<br \/>the roughly directories you are going to be to blame for establishing.<br \/>Shall we embrace, the following descriptors, in recount, within the descriptor listing, must silent consequence on this organization:<br \/>Library<br \/>Your library will contain a category to verbalize WAD records as described on this half.<br \/>Wad Class<br \/>The Wad class is aged to verbalize WAD records and could perchance also contain the following capabilities. The root of all paths<br \/>within the WAD records must silent be \u201c\/\u201d, and each directory must silent be separated by \u2018\/\u2019 (e.g., \u201c\/F\/F1\/LOLWUT\u201d).<br \/>public static Wad* loadWad(const string &#038;course)<br \/>Object allocator; dynamically creates a Wad object and loads the WAD file records from course into memory.<br \/>Caller must deallocate the memory utilizing the delete key phrase.<br \/>public string getMagic()<br \/>Returns the magic for this WAD records.<br \/>public bool isContent(const string &#038;course)<br \/>Returns proper if course represents bid material (records), and spurious in any other case.<br \/>public bool isDirectory(const string &#038;course)<br \/>Returns proper if course represents a directory, and spurious in any other case.<br \/>public int getSize(const string &#038;course)<br \/>If course represents bid material, returns the likelihood of bytes in its records; in any other case, returns -1.<br \/>public int getContents(const string &#038;course, char *buffer, int length, int offset = 0)<br \/>If course represents bid material, copies as many bytes as are available, up to length, of bid material\u2019s records into the preexisting<br \/>buffer. If offset is equipped, records must silent be copied starting from that byte within the bid material. Returns<br \/>possibility of bytes copied into buffer, or -1 if course doesn&#8217;t describe bid material (e.g., if it represents a directory).<br \/>public int getDirectory(const string &#038;course, vector<string> *directory)<br \/>If course represents a directory, areas entries for in an instant contained parts in directory. The parts<br \/>must silent be placed within the directory within the same recount as they&#8217;re found within the WAD file. Returns the likelihood of<br \/>parts within the directory, or -1 if course doesn&#8217;t describe a directory (e.g., if it represents bid material).<br \/>Offset Length Title<br \/>0 0 F_START<br \/>0 0 F1_START<br \/>67500 0 E1M1<br \/>67500 1380 THINGS<br \/>68880 6650 LINEDEFS<br \/>75532 19440 SIDEDEFS<br \/>94972 1868 VERTEXES<br \/>96840 8784 SEGS<br \/>105624 948 SSECTORS<br \/>106572 6608 NODES<br \/>113180 2210 SECTORS<br \/>115392 904 REJECT<br \/>116296 6922 BLOCKMAP<br \/>42 9001 LOLWUT<br \/>0 0 F1_END<br \/>0 0 F_END<br \/>F<br \/>F1<br \/>E1M1<br \/>THINGS<br \/>LINEDEFS<br \/>SIDEDEFS<br \/>VERTEXES<br \/>SEGS<br \/>SSECTORS<br \/>NODES<br \/>SECTORS<br \/>REJECT<br \/>BLOCKMAP<br \/>LOLWUT<br \/>Directory Structure<\/p>\n<p>public void createDirectory(const string &#038;course)<br \/>course entails the identify of the contemporary directory to be created. If given a official course, creates a brand contemporary directory<br \/>utilizing namespace markers at course. The 2 contemporary namespace markers will doubtless be added factual before the _END<br \/>marker of its guardian directory. Unique directories can no longer be created inside of plot markers.<br \/>public void createFile(const string &#038;course)<br \/>course entails the identify of the contemporary file to be created. If given a official course, creates an empty file at course,<br \/>with an offset and length of 0. The file will doubtless be added to the descriptor listing factual before the _END marker<br \/>of its guardian directory. Unique files can no longer be created inside of plot markers.<br \/>public int writeToFile(const string &#038;course, const char *buffer, int length, int offset = 0)<br \/>If given a official course to an empty file, augments file size and generates a lump offset, then writes length amount<br \/>of bytes from the buffer into the files lump records. If offset is equipped, records must silent be written starting from that<br \/>byte within the lump bid material. Returns possibility of bytes copied from buffer, or -1 if course doesn&#8217;t describe bid material<br \/>(e.g., if it represents a directory).<br \/>Daemon Characterize &#038; Parameters<br \/>Your daemon must silent contain identify wadfs and could perchance also win at a minimal three parameters the single-threaded<br \/>flag \u201c-s\u201d, the target WAD file, and the mount directory. Shall we embrace, this bid must silent mount TINY.WAD<br \/>in \/home\/reptilian\/mountdir<br \/>$ .\/wadfs -s TINY.WAD \/home\/reptilian\/mountdir<br \/>$<br \/>and this must silent consequence from executing the ls bid to uncover segment of its contents:<br \/>$ ls \/home\/reptilian\/mountdir\/F\/F1 -al<br \/>total 0<br \/>drwxrwxrwx. 2 root root 0 Jan 1 1970 .<br \/>drwxrwxrwx. 2 root root<br \/>drwxrwxrwx. 2 root root<br \/>0 Jan 1 1970 ..<br \/>0 Jan 1 1970 E1M1<br \/>-rwxrwxrwx. 2 root root 9001 Jan 1 1970 LOLWUT<br \/>Your daemon must silent rush within the background. Develop no longer laborious-code the debug (-d) or foreground (-f) flags!<br \/>We can bid the following bid below to unmount your filesystem:<br \/>$ fusermount -u \/home\/reptilian\/mountdir<br \/>Additional Credit<br \/>That you just can also glimpse when checking out with your daemon that there is an better limit to how large files you manufacture in<br \/>your filesystem could perchance also be. Your assignment is to configure your library and daemon such that you just are in a feature to manufacture<br \/>large files on your filesystem (utilizing \u201ccp\u201d to replica in a 200KB image file, shall we embrace). Operating your<br \/>daemon in debug mode (-d) could perchance also provide you with hints as to how sure calls are expected to behave.<br \/>NOTE: If a file or directory is created within the foundation directory, this could perchance also be placed at the very discontinue of the<br \/>descriptor listing, in location of before an \u201c_END\u201d namespace marker.<br \/>Building with FUSE<br \/>FUSE is a userspace filesystem API that is supported in an instant by the Linux kernel. It enables userspace programs<br \/>to create records to the kernel about filesystems the kernel can no longer verbalize by itself.<br \/>Set up &#038; Setup<br \/>To bid the FUSE library, you are going to want to set up it within Reptilian and alternate the FUSE permissions:<br \/>$ sudo factual set up libfuse-dev fuse<br \/>$ sudo chmod 666 \/dev\/fuse<br \/>NOTE: whereas you reboot the digital machine, you are going to want to re-add the FUSE permissions, as they&#8217;ll almost definitely be reset!<br \/>Respect Directives<br \/>In recount to form programs utilizing the FUSE library system, you are going to want to specify the file offset bits as 64 and<br \/>identify the FUSE model. We counsel specifying FUSE model 26 (even supposing this is optional):<br \/>$ g++ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 myproggy.cpp -o myproggy -lfuse<br \/>Submissions<br \/>You could put up the following at the head of this project:<br \/>Chronicle (p3.txt) in man internet page structure on Canvas, collectively with hyperlink to unlisted screencast video<br \/>Compressed tar archive (wad.tar.gz) for libWad library and wadfs daemon on Canvas<br \/>Chronicle<br \/>Your file will verbalize the plan you implemented the daemon, collectively with your total structure \/ program<br \/>building. It must consist of a proof of the plan you describe the WAD file parts as a directory building<br \/>in memory, as properly as how this building was once utilized within the daemon when working. It would come with a<br \/>description of how checking out was once carried out along with any known bugs. The file must silent be no bigger than 600<br \/>phrases, quilt all relevant elements of the project, and be organized and formatted professionally this is no longer a<br \/>memo!<br \/>File and Directory Necessities<br \/>Your daemon must put in pressure, at a minimal, the following filesystem capabilities to create learn and write<br \/>access:<br \/>1) Retrieving file and directory attributes<br \/>2) Reading from reward files, and writing to contemporary ones<br \/>3) Reading from reward directories, and writing to contemporary ones<br \/>Info and directories must silent be given corpulent learn, write, and raze permissions.<br \/>The above necessities will doubtless be carried out utilizing, at a minimal, the following six fuse callback capabilities:<br \/>get_attr, mknod, mkdir, learn, write, and readdir<br \/>It is very urged to closely apply the linked sources at the bottom of this pdf to help with your<br \/>FUSE implementation. All changes to the filesystem, reminiscent of directory and file introduction, must continue to exist between<br \/>mounting and unmounting.<br \/>To form the library and daemon, we can raze these instructions:<br \/>$ tar zxvf wad.tar.gz<br \/>$ cd libWad<br \/>$ make<br \/>$ cd ..<br \/>$ cd wadfs<br \/>$ make<br \/>$ cd ..<br \/>To rush your daemon, we can raze this bid:<br \/>$ .\/wadfs\/wadfs -s somewadfile.wad \/some\/mount\/directory<br \/>To form another program utilizing your library, we can raze this bid:<br \/>$ c++ -o program_name sourcefile.cpp -L .\/libWad -lWad<br \/>Priceless Hyperlinks<br \/>That you just can also get the following sources helpful when discovering out about how to put in pressure a FUSE daemon:<br \/>https:\/\/www.cs.nmsu.edu\/~pfeiffer\/fuse-tutorial\/html\/<br \/>https:\/\/engineering.facile.it\/weblog\/eng\/write-filesystem-fuse\/<br \/>https:\/\/maastaar.win\/fuse\/linux\/filesystem\/c\/2019\/09\/28\/writing-less-easy-yet-dull-filesystem-utilizing-FUSE-in-C\/<br \/>https:\/\/www.cs.hmc.edu\/~geoff\/classes\/hmc.cs137.201601\/homework\/fuse\/fuse_doc.html<br \/>http:\/\/slade.mancubus.win\/index.php?internet page=about<br \/>Screencast<br \/>As properly as to the written text file, you&#8217;ll need to silent put up a screencast (with audio) strolling thru your library<br \/>and the daemon you wrote to create the filesystem interface, describing your main capabilities and<br \/>structures (~5:30).<br \/>Compressed Archive (wad.tar.gz)<br \/>Your compressed tar file must silent contain the following directory\/file building:<br \/>wad.tar.gz<br \/>wad.tar<br \/>libWad (directory)<br \/>Makefile<br \/>Wad.h<br \/>(Moderately a range of source files)<br \/>wadfs (directory)<br \/>Makefile<br \/>(Moderately a range of source files)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OverviewYour quilt within the Lizard Legion was once blown, and youve been revealed as a double agent and driven out! It was onceall very James Bond, whereas you raze whisper so yourself, and what a brave underground helicopter get away it was once howeveryou&#8217;re feeling lucky to contain escaped with your pores and skin. (Literally\u2026 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-30832","post","type-post","status-publish","format-standard","hentry","category-solutions"],"_links":{"self":[{"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/posts\/30832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/comments?post=30832"}],"version-history":[{"count":0,"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/posts\/30832\/revisions"}],"wp:attachment":[{"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/media?parent=30832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/categories?post=30832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/academicwritersbay.com\/solutions\/wp-json\/wp\/v2\/tags?post=30832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}