{"id":1388,"date":"2026-02-14T22:39:16","date_gmt":"2026-02-14T13:39:16","guid":{"rendered":"https:\/\/pg-mana.net\/blog\/?p=1388"},"modified":"2026-02-16T09:51:10","modified_gmt":"2026-02-16T00:51:10","slug":"baremetal_rust_relocation","status":"publish","type":"post","link":"https:\/\/pg-mana.net\/blog\/baremetal_rust_relocation\/","title":{"rendered":"\u30d9\u30a2\u30e1\u30bf\u30ebRust\u3067\u30bb\u30eb\u30d5\u30ea\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u80cc\u666f<\/h2>\n\n\n\n<p>(\u8a73\u3057\u3044\u4eba\u306b\u306f\u91c8\u8fe6\u306b\u8aac\u6cd5\u306a\u5185\u5bb9\u306a\u306e\u3067\u8aad\u307f\u98db\u3070\u3057\u3066\u304f\u3060\u3055\u3044\u3002)<\/p>\n\n\n\n<p>\u81ea\u4f5cOS\u3084\u81ea\u4f5cVMM\u3092\u3084\u3063\u3066\u3044\u308b\u969b\u306b\u554f\u984c\u306b\u306a\u308b\u306e\u304c\u3001\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u3092\u3069\u3046\u3059\u308b\u304b\u3067\u3059\u3002\u901a\u5e38U-Boot\u3084UEFI\u306a\u3069\u306e\u30d6\u30fc\u30c8\u30ed\u30fc\u30c0\u304b\u3089OS\u306e\u30ed\u30fc\u30c0\u304c\u8d77\u52d5\u3057\u3066Kernel\u3092\u5c55\u958b\u3059\u308b\u3001\u3082\u3057\u304f\u306fKernel\u304c\u76f4\u63a5\u8d77\u52d5\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>MMU\u3092\u6301\u3064CPU\u3067\u52d5\u304f\u6c4e\u7528Kernel\u306f<code>0xFFFF...<\/code>\u304b\u3089\u59cb\u307e\u308b\u3044\u308f\u3086\u308bHigh Memory Address\u3067\u52d5\u304f\u3053\u3068\u304c\u5927\u534a\u3067\u3001\u3053\u306e\u30da\u30fc\u30b8\u30c6\u30fc\u30d6\u30eb\u306fKernel\u306e\u8d77\u52d5\u521d\u671f\u304b\u30ed\u30fc\u30c0\u304c\u4f5c\u6210\u3057\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001Kernel\u306e\u30a2\u30c9\u30ec\u30c3\u30b7\u30f3\u30b0\u306f(ASLR\u306a\u3069\u3042\u308a\u307e\u3059\u304c)\u9759\u7684\u3067\u3082\u52d5\u304d\u307e\u3059\u304c\u3001\u3053\u306e\u30da\u30fc\u30b8\u30c6\u30fc\u30d6\u30eb\u304c\u3067\u304d\u308b\u524d\u306f\u7269\u7406\u30a2\u30c9\u30ec\u30b9\u3067\u95a2\u6570\u3084\u5909\u6570\u306e\u30a2\u30c9\u30ec\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u7d44\u307f\u8fbc\u307f\u7cfb\u306a\u3069\u3042\u3089\u304b\u3058\u3081\u52d5\u304f\u74b0\u5883\u304c\u6c7a\u307e\u3063\u3066\u3044\u308b\u74b0\u5883\u306f\u3001\u30ed\u30fc\u30c0\u304c\u7f6e\u304b\u308c\u308b\u30a2\u30c9\u30ec\u30b9\u3092\u30ea\u30f3\u30ab\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u6307\u5b9a\u3057\u3066\u30d3\u30eb\u30c9\u3059\u308c\u3070\u30d0\u30a4\u30ca\u30ea\u306b\u30a2\u30c9\u30ec\u30b9\u304c\u9069\u5207\u306b\u57cb\u3081\u8fbc\u307e\u308c\u307e\u3059\u3002\u4e00\u65b9\u3067\u6c4e\u7528OS\u3067\u306f\u52d5\u4f5c\u74b0\u5883\u306b\u3088\u3063\u3066RAM\u304c\u5b58\u5728\u3057\u3066\u3044\u308b\u30a2\u30c9\u30ec\u30b9\u304c\u7570\u306a\u308a\u3001\u30ed\u30fc\u30c9\u3055\u308c\u3066\u521d\u3081\u3066\u6c7a\u5b9a\u3059\u308b\u3053\u3068\u3082\u591a\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u305d\u306e\u305f\u3081\u3001\u7279\u306b\u30ed\u30fc\u30c0\u306f\u3069\u306e\u30a2\u30c9\u30ec\u30b9\u306b\u3082\u914d\u7f6e\u3055\u308c\u3066\u3082\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u3057\u3066\u30ed\u30fc\u30c0\u306e\u4e2d\u3067\u30e1\u30e2\u30ea\u30de\u30c3\u30d7\u3092\u628a\u63e1\u3057\u3066Kernel\u3067\u4f7f\u7528\u3059\u308b\u30e1\u30e2\u30ea\u9818\u57df\u3092\u6c7a\u5b9a\u3057\u30ed\u30fc\u30c9\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30b3\u30fc\u30c9\u30ec\u30d9\u30eb\u3067\u3069\u306e\u30a2\u30c9\u30ec\u30b9\u306b\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3082\u52d5\u304f\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u56fa\u5b9a\u306e\u30a2\u30c9\u30ec\u30b9\u3092\u6301\u305f\u306a\u3044\u306a\u3069\u306e\u5bfe\u7b56\u3067\u5b9f\u73fe\u3067\u304d\u307e\u3059\u304c\u3001\u5b9f\u969b\u306e\u6a5f\u68b0\u8a9e\u3067\u56fa\u5b9a\u30a2\u30c9\u30ec\u30b9\u3092\u4f7f\u7528\u3057\u306a\u3044\u69d8\u306b\u3059\u308b\u306b\u306f\u624b\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u3084\u95a2\u6570\u306a\u3069\u306e\u30a2\u30c9\u30ec\u30b9\u3092\u6301\u3063\u3066\u304a\u304b\u306a\u3044\u3068\u53c2\u7167\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p>\u6700\u8fd1\u306eCPU\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306fPC\u76f8\u5bfe\u3068\u3044\u3046\u30a2\u30c9\u30ec\u30c3\u30b7\u30f3\u30b0\u30e2\u30fc\u30c9\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u30a2\u30c9\u30ec\u30b9\u3092\u6307\u5b9a\u3059\u308b\u969b\u306b\u73fe\u5728\u5b9f\u884c\u3057\u3066\u3044\u308b\u547d\u4ee4\u306ePC(Program Counter)\u304b\u3089\u306e\u76f8\u5bfe\u5024\u3092\u30aa\u30da\u30e9\u30f3\u30c9\u3068\u3057\u3066\u6a5f\u68b0\u8a9e\u306b\u57cb\u3081\u8fbc\u3093\u3067\u304a\u304d\u3001\u5b9f\u884c\u6642\u306bCPU\u304cPC\u306e\u5024\u3092\u5143\u306b\u5b9f\u969b\u306e\u30a2\u30c9\u30ec\u30b9\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002\u5b9f\u73fe\u306b\u306f\u3044\u304f\u3064\u304b\u624b\u6bb5\u304c\u3042\u308a\u307e\u3059\u304cx86_64\u3084Arm\u3001RISC-V\u304c\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002(x86(32bit)\u306f\u3053\u306e\u65b9\u5f0f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u3089\u305a\u3001\u95a2\u6570\u547c\u3073\u51fa\u3057\u3067\u30b9\u30bf\u30c3\u30af\u304b\u3089\u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u308a\u51fa\u3059\u306a\u3069\u3057\u307e\u3059\u3002)\u3053\u306e\u3088\u3046\u306aPC\u76f8\u5bfe\u30a2\u30c9\u30ec\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3069\u306e\u30a2\u30c9\u30ec\u30b9\u306b\u914d\u7f6e\u3055\u308c\u3066\u3082\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3092PIC(Position Independent Code)\/PIE(Position Independent Executable)\u3068\u3044\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>PC\u76f8\u5bfe\u304c\u3042\u308b\u304b\u3089\u5168\u3066\u89e3\u6c7a\u304b\u3068\u3044\u3046\u3068\u305d\u3046\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u95a2\u6570\u30dd\u30a4\u30f3\u30bf\u3092\u4fdd\u6301\u3057\u3066\u3044\u308b\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u306a\u3069\u306f\u3001\u5b9f\u884c\u958b\u59cb\u6642\u304b\u3089\u6709\u52b9\u306a\u30a2\u30c9\u30ec\u30b9\u3092\u4fdd\u6301\u3057\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u6b63\u78ba\u306b\u306f\u5206\u5272\u30b3\u30f3\u30d1\u30a4\u30eb\u306a\u3069\u3067\u3001\u3044\u3064\u53c2\u7167\u3055\u308c\u308b\u304b\u30b3\u30f3\u30d1\u30a4\u30e9\u304b\u3089\u306f\u5224\u65ad\u3067\u304d\u305a\u3001\u304b\u3064\u521d\u671f\u5316\u30b3\u30fc\u30c9\u3092\u81ea\u52d5\u7684\u306b\u633f\u5165\u3067\u304d\u306a\u3044\u8a00\u8a9e\u4ed5\u69d8\u306e\u305f\u3081\u3067\u3059\u3002\u3053\u308c\u3089\u306f <code>rela<\/code>\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u5b9f\u884c\u6642\u306b\u30d9\u30fc\u30b9\u30a2\u30c9\u30ec\u30b9\u3092\u66f8\u304d\u8fbc\u3080\u5834\u6240\u304c\u5217\u6319\u3057\u3066\u4fdd\u5b58\u3055\u308c\u3066\u3044\u3066\u3001\u5b9f\u884c\u524d\u306b\u30ed\u30fc\u30c0\u3084CRT\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rust\u3067\u30d5\u30e9\u30c3\u30c8\u30d0\u30a4\u30ca\u30ea\u3067PIE\u304c\u3057\u305f\u3044<\/h2>\n\n\n\n<p>\u81ea\u4f5cOS(<a href=\"https:\/\/github.com\/PG-MANA\/Methylenix\" data-type=\"link\" data-id=\"https:\/\/github.com\/PG-MANA\/Methylenix\">https:\/\/github.com\/PG-MANA\/Methylenix<\/a>)\u3092RISC-V\u5411\u3051\u306b\u30dd\u30fc\u30c8\u3057\u3066\u3044\u3066\u3001\u305d\u306e\u969b\u306b\u30ed\u30fc\u30c9\u3092\u3069\u3046\u3059\u308b\u304b\u3092\u8003\u3048\u3066\u3044\u307e\u3057\u305f\u3002x86_64\u306fGRUB2\u304b\u3089Multiboot\u7d4c\u7531\u3067\u7acb\u3061\u4e0a\u3052\u3066\u3044\u3066ELF\u3092\u9069\u5207\u306b\u914d\u7f6e\u3057\u3066\u304f\u308c\u307e\u3059\uff08\u305d\u308d\u305d\u308d\u3069\u3046\u306b\u304b\u3057\u305f\u3044\uff09\u3002AArch64\u306fUEFI\u304b\u3089\u7acb\u3061\u4e0a\u3052\u308b\u3053\u3068\u3092\u524d\u63d0\u306bLoader\u3092\u4f5c\u3063\u3066\u3001Kernel\u306eELF\u3092\u8aad\u307f\u8fbc\u3093\u3067\u30da\u30fc\u30b8\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>RISC-V\u3067\u3069\u3046\u3059\u308b\u304b\u8003\u3048\u305f\u306e\u3067\u3059\u304c\u3001U-Boot\u304b\u3089\u7acb\u3061\u4e0a\u304c\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u305f\u3081\u3001ELF\u5f62\u5f0f\u304bPE\u5f62\u5f0f(bootefi)\u3067\u30ed\u30fc\u30c0\u3092\u4f5c\u308b\u3053\u3068\u3092\u8003\u3048\u307e\u3057\u305f\u3002ELF\u5f62\u5f0f\u3067\u306fELF\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u30d8\u30c3\u30c0\u306b\u66f8\u304b\u308c\u3066\u3044\u308b\u30a2\u30c9\u30ec\u30b9\u306b\u30ed\u30fc\u30c9\u3057\u3066\u3057\u307e\u3044\u307e\u3059(<a href=\"https:\/\/github.com\/u-boot\/u-boot\/blob\/v2026.01\/lib\/elf.c#L100\">https:\/\/github.com\/u-boot\/u-boot\/blob\/v2026.01\/lib\/elf.c#L100<\/a>)\u3002\u3053\u308c\u3067\u306f\u52d5\u7684\u306b\u8aad\u307f\u8fbc\u3080\u30a2\u30c9\u30ec\u30b9\u3092\u6c7a\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002U-Boot\u306fUEFI\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\uff08\u5b8c\u5168\u3067\u306f\u306a\u3044\u3082\u306e\u306e\uff09\u52d5\u304b\u305b\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u3066\u3001UEFI\u306e\u4ed5\u69d8\u306b\u5f93\u3044\u52d5\u7684\u518d\u914d\u7f6e\u304c\u884c\u3048\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002RISC-V\u3067\u3082\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u304c\u3001Rust\u3067RISC-V\u5411\u3051UEFI\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u308b\u65b9\u6cd5\u304c\u307e\u3060\u306a\u3044\uff08\u591a\u5206target.json\u3092\u66f8\u3051\u3070\u3044\u3051\u308b\uff09\u306e\u3068\u3001PE\u5f62\u5f0f\u306b\u983c\u308b\u306e\u304c\u8ca0\u3051\u305f\u6c17\u5206\u306b\u306a\u3063\u305f\u306e\u3067\u65ad\u5ff5\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u3068\u3044\u3046\u308f\u3051\u3067\u3001\u6b8b\u308b\u306fFlat Binary\u3001\u3059\u306a\u308f\u3061\u30e1\u30e2\u30ea\u306b\u5c55\u958b\u3057\u3066\u4e00\u5207\u306e\u524d\u51e6\u7406\u3092\u884c\u308f\u305a\u306b\u5148\u982d\u30a2\u30c9\u30ec\u30b9\u306b\u30b8\u30e3\u30f3\u30d7\u3057\u3066\u5b9f\u884c\u3059\u308b\u65b9\u5f0f\u3092\u53d6\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u306fLinux Kernel\u306eImage\u306a\u3069\u3067\u3082\u63a1\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002(AArch64\u306eImage\u306fPE\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u3082\u6a5f\u80fd\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002)<\/p>\n\n\n\n<p>\u51fa\u529b\u3092Flat Binary\u306b\u3059\u308b\u306b\u306f\u3001\u30ea\u30f3\u30ab\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u3001<code>OUTPUT_FORMAT(binary)<\/code>\u3092\u6307\u5b9a\u3059\u308b\u3068\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001PIE\u306a\u6a5f\u68b0\u8a9e\u3092\u751f\u6210\u3059\u308b\u305f\u3081\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a<code>.cargo\/config.toml<\/code>\u3092\u66f8\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;target.'cfg(all(target_arch = \"riscv64\", target_os = \"none\"))']\nrustflags = &#91;\n    \"-C\", \"code-model=medium\",\n    \"-C\", \"relocation-model=pie\",\n    \"-C\", \"no-redzone=yes\",\n    \"-C\", \"panic=abort\",\n    \"-C\", \"link-arg=-Tloader.ld\",\n]<\/code><\/pre>\n\n\n\n<p>\u3053\u308c\u3067\u3067\u304d\u305fLoader\u306e\u30d0\u30a4\u30ca\u30ea\u3092U-Boot\u3067\u5b9f\u884c\u3057\u307e\u3059\u3002<code>$kernel_addr_r<\/code>\u306b\u306f\u74b0\u5883\u3054\u3068\u306b\u9055\u3046\u30a2\u30c9\u30ec\u30b9\u304c\u5165\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fatload nvme 0 $kernel_addr_r loader\ngo $kernel_addr_r<\/code><\/pre>\n\n\n\n<p>\u7d50\u679c\u306f\u307e\u3042&#8230;\u30b3\u30b1\u308b\u308f\u3051\u3067\u3059\u3002(\u30b3\u30b1\u305f\u3068\u304d\u306e\u4f8b\u5916\u60c5\u5831\u3092\u53d6\u308a\u5fd8\u308c\u307e\u3057\u305f&#8230;)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u539f\u56e0\u8ffd\u6c42<\/h2>\n\n\n\n<p>\u4eca\u56de\u30b3\u30b1\u305f\u547d\u4ee4\u306e\u30a2\u30c9\u30ec\u30b9\u306f<code>0x84004364<\/code>\u3067\u3057\u305f\u3002<code>0x84000000<\/code>\u306f<code>$kernel_addr_r<\/code>\u306e\u5024\u306a\u306e\u3067\u3001\u30b3\u30b1\u305f\u547d\u4ee4<code>\u306f0x4364<\/code>\u3068\u3044\u3046\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002\u30c7\u30d0\u30c3\u30b0\u306e\u305f\u3081\u306b\u51fa\u529b\u5f62\u5f0f\u3092ELF\u306b\u623b\u3057\u3066\u3001objdump\u3067\u307f\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>00000000000042e6 &lt;core::fmt::write&gt;:\n    42e6: 7159          addi    sp, sp, -0x70\n    42e8: f486          sd      ra, 0x68(sp)\n    42ea: f0a2          sd      s0, 0x60(sp)\n    42ec: eca6          sd      s1, 0x58(sp)\n    42ee: e8ca          sd      s2, 0x50(sp)\n    42f0: e4ce          sd      s3, 0x48(sp)\n    42f2: e0d2          sd      s4, 0x40(sp)\n    42f4: fc56          sd      s5, 0x38(sp)\n    42f6: f85a          sd      s6, 0x30(sp)\n    42f8: f45e          sd      s7, 0x28(sp)\n    42fa: f062          sd      s8, 0x20(sp)\n    42fc: ec66          sd      s9, 0x18(sp)\n    42fe: 89b6          mv      s3, a3\n    4300: 892e          mv      s2, a1\n    4302: 0016f593      andi    a1, a3, 0x1\n    4306: 8a2a          mv      s4, a0\n    4308: 14059763      bnez    a1, 0x4456 &lt;core::fmt::write+0x170&gt;\n    430c: 00064403      lbu     s0, 0x0(a2)\n    4310: 16040763      beqz    s0, 0x447e &lt;core::fmt::write+0x198&gt;\n    4314: 4c01          li      s8, 0x0\n    4316: 01893a83      ld      s5, 0x18(s2)\n    431a: 08000b13      li      s6, 0x80\n    431e: 0c000b93      li      s7, 0xc0\n    4322: 60000cb7      lui     s9, 0x60000\n    4326: 020c8c93      addi    s9, s9, 0x20\n    432a: a025          j       0x4352 &lt;core::fmt::write+0x6c&gt;\n    432c: 004c1513      slli    a0, s8, 0x4\n    4330: 00a985b3      add     a1, s3, a0\n    4334: 6188          ld      a0, 0x0(a1)\n    4336: 6590          ld      a2, 0x8(a1)\n    4338: e052          sd      s4, 0x0(sp)\n    433a: e44a          sd      s2, 0x8(sp)\n    433c: e866          sd      s9, 0x10(sp)\n    433e: 858a          mv      a1, sp\n    4340: 9602          jalr    a2\n    4342: 14051063      bnez    a0, 0x4482 &lt;core::fmt::write+0x19c&gt;\n    4346: 0c05          addi    s8, s8, 0x1\n    4348: 0004c403      lbu     s0, 0x0(s1)\n    434c: 8626          mv      a2, s1\n    434e: 12040863      beqz    s0, 0x447e &lt;core::fmt::write+0x198&gt;\n    4352: 03841513      slli    a0, s0, 0x38\n    4356: 00160493      addi    s1, a2, 0x1\n    435a: 00054a63      bltz    a0, 0x436e &lt;core::fmt::write+0x88&gt;\n    435e: 8552          mv      a0, s4\n    4360: 85a6          mv      a1, s1\n    4362: 8622          mv      a2, s0\n    4364: 9a82          jalr    s5<\/code><\/pre>\n\n\n\n<p><code>jalr s5<\/code>\u306f\u623b\u308a\u5148\u3092\u30ea\u30f3\u30af\u30ec\u30b8\u30b9\u30bf\u306b\u683c\u7d0d\u3057\u3066\u30ec\u30b8\u30b9\u30bf\u306e\u5024\u306b\u30b8\u30e3\u30f3\u30d7\u3059\u308b\u547d\u4ee4\u306a\u306e\u3067\u3001s5\u30ec\u30b8\u30b9\u30bf\u306e\u5024\u304c\u58ca\u308c\u3066\u3044\u308b\u3068\u4e88\u60f3\u3057\u307e\u3059\u3002\u95a2\u6570\u306e\u5148\u982d\u306b\u5411\u304b\u3063\u3066\u305f\u3069\u308b\u3068<code>ld s5, 0x18(s2)<\/code>\u304c\u3042\u308a\u3001s2\u30ec\u30b8\u30b9\u30bf\u306e\u6307\u3059\u5148\u304b\u3089<code>0x18<\/code>\u30d0\u30a4\u30c8\u5148\u304b\u3089\u30ed\u30fc\u30c9\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002\u305d\u3057\u3066\u623b\u3063\u3066\u3044\u304f\u3068<code>mv s2, a1<\/code>\u3068\u3042\u308b\u3088\u3046\u306b\u3001\u3053\u306e\u30ec\u30b8\u30b9\u30bf\u306f\u5f15\u6570\u3068\u3057\u3066\u6e21\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n\n\n\n<p><code>core::fmt::write<\/code>\u3092\u547c\u3093\u3067\u3044\u308b\u306e\u306f\u81ea\u4f5c\u3057\u305f<code>print<\/code>\u95a2\u6570\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0000000000002ba6 &lt;kernel_loader::print::print&gt;:\n    2ba6: 86ae          mv      a3, a1\n\n0000000000002ba8 &lt;.Lpcrel_hi26&gt;:\n    2ba8: 00b71597      auipc   a1, 0xb71\n    2bac: f4058593      addi    a1, a1, -0xc0\n    2bb0: 6198          ld      a4, 0x0(a1)\n    2bb2: c739          beqz    a4, 0x2c00 &lt;.Lpcrel_hi27+0x40&gt;\n    2bb4: 862a          mv      a2, a0\n    2bb6: 0016f513      andi    a0, a3, 0x1\n    2bba: e919          bnez    a0, 0x2bd0 &lt;.Lpcrel_hi27+0x10&gt;\n    2bbc: 00858513      addi    a0, a1, 0x8\n\n0000000000002bc0 &lt;.Lpcrel_hi27&gt;:\n    2bc0: 00002597      auipc   a1, 0x2\n    2bc4: 31058593      addi    a1, a1, 0x310\n    2bc8: 00001317      auipc   t1, 0x1\n    2bcc: 71e30067      jr      0x71e(t1) &lt;core::fmt::write&gt;<\/code><\/pre>\n\n\n\n<p>\u4e0b\u304b\u3089a1\u3092\u8ffd\u3044\u304b\u3051\u308b\u3068\u3059\u3050\u4e0a\u306b<code>auipc<\/code>\u547d\u4ee4\u3068<code>addi<\/code>\u547d\u4ee4\u304c\u3042\u308a\u307e\u3059\u3002<code>auipc<\/code>\u547d\u4ee4\u306f\u73fe\u5728\u306ePC\u3068\u30aa\u30da\u30e9\u30f3\u30c9\u309212\u30d3\u30c3\u30c8\u30b7\u30d5\u30c8\u3057\u305f\u5024\u3092\u52a0\u7b97\u3057\u3066\u30ec\u30b8\u30b9\u30bf\u306b\u683c\u7d0d\u3059\u308b\u547d\u4ee4\u3067\u3059\u3002\u3064\u307e\u308a\u3053\u3053\u3001\u300cobjdump\u4e0a\u300d\u3067\u306f<code>a1 = 0x2bc0 + (0x2 &lt;&lt; 12) = 0x4bc0<\/code>\u3068\u3044\u3046\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u304cPC\u76f8\u5bfe\u30a2\u30c9\u30ec\u30c3\u30b7\u30f3\u30b0\u3067\u3001\u5b9f\u969b\u306e\u52d5\u4f5c\u74b0\u5883\u306b\u3088\u3063\u3066\u683c\u7d0d\u3055\u308c\u308b\u5024\u306f\u5909\u308f\u308a\u307e\u3059\u3002\u5148\u7a0b\u52d5\u4f5c\u3055\u305b\u305f\u74b0\u5883\u3067\u306f<code>0x84002bc0 + (0x2 &lt;&lt; 12)<\/code>\u306b\u306a\u308b\u306f\u305a\u3067\u3059\u3002objdump\u3067\u306f0\u30d9\u30fc\u30b9\u3067\u8868\u793a\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u5148\u7a0b\u306e\u8a08\u7b97\u7d50\u679c\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e<code>addi<\/code>\u547d\u4ee4\u306f\u52a0\u7b97\u547d\u4ee4\u3067\u3001<code>a1 = a1 + 0x310 = 0x4bc0 + 0x310 = 0x4ed0<\/code>\u304c\u5b9f\u884c\u7d50\u679c\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3055\u3066\u3001\u3053\u306e\u30a2\u30c9\u30ec\u30b9\u3092readelf\u306a\u3069\u3067\u53c2\u7167\u3059\u308b\u3068\u533f\u540d\u5909\u6570\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>182: 0000000000004ed0    48 OBJECT  LOCAL  HIDDEN     2 anon.8ebadb4c8da7aa972c6ef32b2da398b1.26.llvm.17646884786561777633<\/code><\/pre>\n\n\n\n<p>\u3053\u308c\u3067\u306f\u57d2\u304c\u660e\u304b\u306a\u3044\u306e\u3067\u3001<a href=\"https:\/\/pg-mana.net\/blog\/rust_output_asm\/\" data-type=\"post\" data-id=\"365\">Rust\u306b\u30a2\u30bb\u30f3\u30d6\u30ea\u3092\u5410\u304b\u305b\u308b\u65b9\u6cd5<\/a>\u3092\u4f7f\u3063\u3066\u3001\u30a2\u30bb\u30f3\u30d6\u30ea\u3092\u51fa\u3057\u3066\u6bd4\u8f03\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_RNvNtCs4S0rFkNLftr_13kernel_loader5print5print:\n   mv      a3, a1\n.Lpcrel_hi51:\n   auipc   a1, %pcrel_hi(.L_MergedGlobals)\n   addi    a1, a1, %pcrel_lo(.Lpcrel_hi51)\n   ld      a4, 0(a1)\n   beqz    a4, .LBB10_8\n   mv      a2, a0\n   andi    a0, a3, 1\n   bnez    a0, .LBB10_3\n   addi    a0, a1, 8\n.Lpcrel_hi52:\n   auipc   a1, %pcrel_hi(.Lanon.07d1e03e94b7c3c3fc7ae6cf24a924da.76)\n   addi    a1, a1, %pcrel_lo(.Lpcrel_hi52)\n   tail    _RNvNtCs3pK5phuYJXT_4core3fmt5write<\/code><\/pre>\n\n\n\n<p>\u8868\u73fe\u304c\u5c11\u3057\u7570\u306a\u308a\u307e\u3059\u304c\u3001<code>.Lanon.07d1e03e94b7c3c3fc7ae6cf24a924da.76<\/code>\u306e\u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u308d\u3046\u3068\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002\u3053\u308c\u3082\u30a2\u30bb\u30f3\u30d6\u30ea\u304b\u3089\u63a2\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>   .section        .rodata..Lanon.07d1e03e94b7c3c3fc7ae6cf24a924da.76,\"a\",@progbits\n   .p2align        3, 0x0\n.Lanon.07d1e03e94b7c3c3fc7ae6cf24a924da.76:\n   .asciz  \"\\000\\000\\000\\000\\000\\000\\000\\000\\b\\000\\000\\000\\000\\000\\000\\000\\b\\000\\000\\000\\000\\000\\000\"\n   .quad   _RNvXNtCs4S0rFkNLftr_13kernel_loader5printNtB2_10SerialPortNtNtCs3pK5phuYJXT_4core3fmt5Write9write_str\n   .quad   _RNvYNtNtCs4S0rFkNLftr_13kernel_loader5print10SerialPortNtNtCs3pK5phuYJXT_4core3fmt5Write10write_charB6_\n   .quad   _RNvYNtNtCs4S0rFkNLftr_13kernel_loader5print10SerialPortNtNtCs3pK5phuYJXT_4core3fmt5Write9write_fmtB6_\n   .size   .Lanon.07d1e03e94b7c3c3fc7ae6cf24a924da.76, 48<\/code><\/pre>\n\n\n\n<p>\u540d\u524d\u4fee\u98fe\u3067\u898b\u3065\u3089\u3044\u3067\u3059\u304c\u3001ASCIIZ\u3067\u307b\u3068\u3093\u3069\u30cc\u30eb\u6587\u5b57\u306e\u6587\u5b57\u5217\u3068\u30013\u3064\u306e\u30a2\u30c9\u30ec\u30b9\u304c\u66f8\u304b\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002\u305d\u3057\u3066\u3001\u8a08\u7b97\u3059\u308b\u3068\u3001<code>0x18(a1)<\/code>\u306f<code>.quad _RNvXNtCs4S0rFkNLftr_...write_str<\/code>\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f<code>fmt::write<\/code>\u95a2\u6570\u304b\u3089\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3055\u308c\u308b\u6587\u5b57\u5217\u306e\u51fa\u529b\u95a2\u6570\u3067\u3001trait\u306e\u95a2\u6570(C++\u3067\u3044\u3046\u3068\u3053\u308d\u306e\u7d14\u7c8b\u4eee\u60f3\u95a2\u6570)\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<br>\u3053\u306e\u30dd\u30a4\u30f3\u30bf(\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570)\u306b\u306f\u3001\u30ea\u30f3\u30ab\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5143\u306b\u8a08\u7b97\u3057\u305f\u30a2\u30c9\u30ec\u30b9\u304c\u5165\u3063\u3066\u3044\u305d\u3046\u3067\u3059\u304c\u3001\u5b9f\u884c\u6642\u306b\u30d9\u30fc\u30b9\u30a2\u30c9\u30ec\u30b9\u306b\u5fdc\u3058\u305f\u521d\u671f\u5316\u306f\u3055\u308c\u3066\u3044\u306a\u3055\u305d\u3046\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u3053\u3067\u3001\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3092\u6f01\u3063\u3066\u3044\u308b\u3068\u6211\u3089\u304chikalium\u5148\u751f\u304c\u540c\u3058\u554f\u984c\u306b\u5f15\u3063\u304b\u304b\u3063\u3066\u3044\u307e\u3057\u305f\u3002<a href=\"https:\/\/hikalium.hatenablog.jp\/entry\/2022\/12\/19\/011722\">https:\/\/hikalium.hatenablog.jp\/entry\/2022\/12\/19\/011722<\/a><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-style-default is-layout-flow wp-block-quote-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"\u6642\u9593\u5207\u308c\">\u6642\u9593\u5207\u308c<\/h2>\n\n\n\n<p>\u3068\u3044\u3046\u308f\u3051\u3067\u8ffd\u3044\u304b\u3051\u3066\u3044\u305f\u3089.data.rel.ro\u306e\u6cbc\u306b\u306f\u307e\u3063\u305f\u306e\u3067\u4eca\u65e5\u306f\u3053\u3053\u307e\u3067\u3002\u660e\u65e5\u3082\u3084\u308b\u304b\u3082\u3002\u304a\u3084\u3059\u307f\u306a\u3055\u3044\u2026\u3002<\/p>\n<cite><a href=\"https:\/\/hikalium.hatenablog.jp\/entry\/2022\/12\/19\/011722\">https:\/\/hikalium.hatenablog.jp\/entry\/2022\/12\/19\/011722<\/a><\/cite><\/blockquote>\n\n\n\n<p>\u6cbc\u306b\u30cf\u30de\u3063\u3066\u5bdd\u3066\u307e\u3057\u305f\u3002\u79c1\u306f\u77e5\u3063\u3066\u3044\u307e\u3059&#8230;\u3053\u308c\u306f\u3084\u3089\u306a\u3044\u3084\u3064\u3067\u3001\u300cMANA\u3055\u3093\u5f8c\u306f\u3088\u308d\u3057\u304f\u3045&#8230;\u300d\u3068\u30b9\u30a5\u30c3\u3068\u6d88\u3048\u3066\u3044\u304f\u3084\u3064\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u5468\u8fba\u306e\u8a18\u4e8b\u3092\u63a2\u3057\u3066\u3082\u3084\u3063\u3071\u308a\u3084\u3063\u3066\u306a\u304b\u3063\u305f\u306e\u3067\u3001\u7d9a\u304d\u3092\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3059\u3002<br>\u8a18\u4e8b\u306b\u3042\u308b\u901a\u308a\u3001<code>.data.rel.ro<\/code>\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u3053\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u306f\u7f6e\u304b\u308c\u308b\u3088\u3046\u3067\u3059\u3002objdump\u3067\u30c0\u30f3\u30d7\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Contents of section .data:\n 0010 00000000 00000000 08000000 00000000  ................\n 0020 08000000 00000000 0e360000 00000000  .........6......\n 0030 b08f0000 00000000 1c000000 00000000  ................\n 0040 fc000000 11000000 b08f0000 00000000  ................\n 0050 1c000000 00000000 ec000000 17000000  ................\n 0060 0d8f0000 00000000 24000000 00000000  ........$.......\n 0070 49000000 09000000 28980000 00000000  I.......(.......\n 0080 0d000000 00000000 2f000000 11000000  ........\/.......\n 0090 28980000 00000000 0d000000 00000000  (...............\n 00a0 3e000000 0d000000 28980000 00000000  &gt;.......(.......\n 00b0 0d000000 00000000 46000000 12000000  ........F.......\n 00c0 28980000 00000000 0d000000 00000000  (...............\n 00d0 52000000 0a000000 28980000 00000000  R.......(.......\n 00e0 0d000000 00000000 58000000 12000000  ........X.......\n 00f0 00000000 00000000 08000000 00000000  ................\n 0100 08000000 00000000 dc350000 00000000  .........5......\n ...<\/code><\/pre>\n\n\n\n<p>\u3057\u3070\u3089\u304f\u773a\u3081\u3066\u307f\u307e\u3057\u305f\u304c\u3001\u69cb\u9020\u304c\u308f\u304b\u308a\u307e\u305b\u3093\u3002<code>Elf64_Rel<\/code>\u69cb\u9020\u4f53\u306e\u914d\u5217\u3067\u3082<code>Elf64_Rela<\/code>\u69cb\u9020\u4f53\u306e\u914d\u5217\u3067\u3082\u306a\u3055\u305d\u3046\u3067\u3059\u3002<code>0x08<\/code>\u304c\u5b9a\u671f\u7684\u306b\u73fe\u308c\u307e\u3059\u304c\u3001\u30dd\u30a4\u30f3\u30bf\u306e\u500b\u6570\u3092\u8868\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u3082\u7121\u3055\u305d\u3046\u3067\u3059\u3002<br>\u3053\u3053\u3067\u3001\u30a2\u30c9\u30ec\u30b9\u3092\u3042\u3076\u308a\u51fa\u3059\u305f\u3081\u306b\u3001\u30ea\u30f3\u30ab\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u6700\u521d\u306b<code>. = 0xFF0000;<\/code>\u3092\u8ffd\u52a0\u3057\u3066\u3001\u30d9\u30fc\u30b9\u30a2\u30c9\u30ec\u30b9\u3092\u5909\u66f4\u3057\u3066\u307f\u307e\u3059\u3002\u30d3\u30eb\u30c9\u5f8c\u518d\u5ea6\u30c0\u30f3\u30d7\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> ff0010 00000000 00000000 08000000 00000000  ................\n ff0020 08000000 00000000 0e36ff00 00000000  .........6......\n ff0030 b08fff00 00000000 1c000000 00000000  ................\n ff0040 fc000000 11000000 b08fff00 00000000  ................\n ff0050 1c000000 00000000 ec000000 17000000  ................\n ff0060 0d8fff00 00000000 24000000 00000000  ........$.......\n ff0070 49000000 09000000 2898ff00 00000000  I.......(.......\n ff0080 0d000000 00000000 2f000000 11000000  ........\/.......\n ff0090 2898ff00 00000000 0d000000 00000000  (...............\n ff00a0 3e000000 0d000000 2898ff00 00000000  &gt;.......(.......\n ff00b0 0d000000 00000000 46000000 12000000  ........F.......\n ff00c0 2898ff00 00000000 0d000000 00000000  (...............\n ff00d0 52000000 0a000000 2898ff00 00000000  R.......(.......\n ff00e0 0d000000 00000000 58000000 12000000  ........X.......\n ff00f0 00000000 00000000 08000000 00000000  ................\n ff0100 08000000 00000000 dc35ff00 00000000  .........5......<\/code><\/pre>\n\n\n\n<p><code>0e360000<\/code>\u304c<code>0e36ff00<\/code>\u306b\u5909\u5316\u3057\u305f\u3088\u3046\u306b\u30dd\u30a4\u30f3\u30bf\u306e\u3068\u3053\u308d\u3060\u3051\u5909\u5316\u3057\u307e\u3057\u305f\u3002\u3084\u306f\u308a\u3001\u300cNull or \u30dd\u30a4\u30f3\u30bf\u3001\u5c0f\u3055\u306a\u5024\u3001\u5c0f\u3055\u306a\u5024\u301c\u5927\u304d\u306a\u5024\u3001\u30dd\u30a4\u30f3\u30bf\u3001&#8230;.\u300d\u9023\u7d9a\u3067\u3067\u304d\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3055\u3066\u3001\u3053\u306e\u69cb\u9020\u304c\u4f55\u304b\u3092\u8abf\u3079\u3066\u3044\u305f\u3068\u3053\u308d\u3001trait\u306evtable\u3067\u3042\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3057\u305f\u3002<a href=\"https:\/\/qnighy.hatenablog.com\/entry\/2017\/03\/18\/070000\">https:\/\/qnighy.hatenablog.com\/entry\/2017\/03\/18\/070000<\/a><\/p>\n\n\n\n<p>\u306a\u308b\u307b\u3069\u3001drop\u95a2\u6570\u30dd\u30a4\u30f3\u30bf\u3001\u578b\u30b5\u30a4\u30ba\u3001\u578b\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u3001\u95a2\u6570\u30dd\u30a4\u30f3\u30bf\u306e\u9806\u3067\u4e26\u3093\u3067\u3044\u305f\u306e\u3088\u3046\u3067\u3001\u8fbb\u8904\u304c\u5408\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>Vtable\u306e\u30ea\u30b9\u30c8\u304b\u3089\u9806\u5f53\u306b\u30dd\u30a4\u30f3\u30bf\u3092\u53d6\u308a\u51fa\u3057\u3066\u3001\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30a2\u30c9\u30ec\u30b9\u306b\u306a\u308b\u3088\u3046\u306b\u9069\u5b9c\u8abf\u7bc0\u3059\u308c\u3070\u826f\u3055\u305d\u3046\u3067\u3059\u304c\u3001\u95a2\u6570\u30dd\u30a4\u30f3\u30bf\u304c\u914d\u5217\u9577\u304c\u306a\u3044\u53ef\u5909\u9577\u914d\u5217\u306e\u305f\u3081\u3001\u5148\u982d\u304b\u3089\u9806\u306b\u8fbf\u3063\u3066\u3044\u3063\u3066\u3082\u69cb\u9020\u304c\u628a\u63e1\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p>\u3057\u3070\u3089\u304f\u5538\u3063\u3066\u3044\u307e\u3057\u305f\u304c\u3001\u3046\u307e\u304f\u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u308a\u51fa\u3059\u65b9\u6cd5\u3092\u601d\u3044\u3064\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u89e3\u6c7a\u7b56<\/h2>\n\n\n\n<p>\u3053\u3053\u3067\u3075\u3068\u3001\u30a2\u30c9\u30ec\u30b9\u306e\u90e8\u5206\u3092\u3042\u3076\u308a\u51fa\u3059\u969b\u306b<code>. = 0xFF0000;<\/code>\u3092\u8ffd\u52a0\u3057\u305f\u3053\u3068\u3092\u601d\u3044\u51fa\u3057\u307e\u3057\u305f\u3002<code>0xFF<\/code>\u304c\u3064\u3044\u3066\u3044\u308c\u3070\u30dd\u30a4\u30f3\u30bf\u3068\u5224\u65ad\u3057\u305f\u308f\u3051\u3067\u3059\u304c\u3001\u3053\u308c\u3092\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u3084\u308c\u3070\u3044\u3044\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u601d\u3048\u3070\u3001PC\/AT\u4e92\u63db\u6a5f\u306eBIOS\u3060\u3063\u3066HDD\u3084FDD\u306e\u5148\u982d512\u30d0\u30a4\u30c8\u3092\u8aad\u3093\u3067\u6700\u5f8c\u306e\uff12\u30d0\u30a4\u30c8\u304c0xAA55\u3060\u3063\u305f\u3089\u5148\u982d\u30a2\u30c9\u30ec\u30b9\u306b\u98db\u3076\u3068\u3044\u3046\u3053\u3068\u3092\u7e70\u308a\u8fd4\u3057\u3066\u8d77\u52d5\u3057\u3066\u3044\u307e\u3057\u305f\u3002\uff08MBR\u3068FAT\uff09<\/p>\n\n\n\n<p>\u3053\u308c\u306b\u3042\u3084\u304b\u3063\u3066\u3001\u30d9\u30fc\u30b9\u30a2\u30c9\u30ec\u30b9\u3092<code>0xAA550000<\/code>\u306b\u3057\u3066\u304a\u304d\u3001\u8d77\u52d5\u6642\u306b<code>.data.rel.ro<\/code>\u3092\u7247\u3063\u7aef\u304b\u3089\u8210\u3081\u3066<code>0xAA55<\/code>\u304c\u542b\u307e\u308c\u308b\u30a2\u30c9\u30ec\u30b9\u3092\u4fee\u6b63\u3057\u3066\u3044\u3051\u3070\u3088\u3044\u306e\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u304d\u308c\u3044\u306a\u89e3\u6cd5\u3067\u306f\u306a\u3044\u3067\u3059\u304c\u3001\u307e\u3042\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u3068\u3044\u3046\u3053\u3068\u3067\u8a31\u3057\u3066\u3082\u3089\u3044\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>\u305d\u308c\u3067\u306f\u30ea\u30f3\u30ab\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OUTPUT_FORMAT(binary)\n\/* OUTPUT_FORMAT(elf64-littleriscv) *\/\nENTRY(_start)\n\nSECTIONS {\n  \/* This is the magic number, please see `_start` also *\/\n  . = 0xAA550000;\n\n  .start : {\n    *(.start)\n  }\n\n  . = ALIGN(8);\n  __REL_START = .;\n\n  .data : {\n    KEEP(*(.data.rel*))\n  }\n\n  . = ALIGN(8);\n  .got : {\n    KEEP(*(.got))\n  }\n  __REL_END = .;\n  \n  .text : {\n    *(.text .text.*)\n  }\n\n  .data : {\n    *(.data)\n  }\n  \n  .rodata : {\n    *(.rodata .rodata.*)\n  }\n\n  .bss : {\n    KEEP(*(.bss .bss.*))\n  }\n\n  \/DISCARD\/ : {\n    *(.comment .comment.*)\n    *(.eh_frame .eh_frame.*)\n    *(.eh_frame_hdr .eh_frame_hdr.*)\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>\u5168\u30e1\u30e2\u30ea\u3092\u8210\u3081\u308b\u3068\u6d41\u77f3\u306b\u554f\u984c\u304c\u3042\u308b\u306e\u3067\u3001\u95a2\u6570\u30dd\u30a4\u30f3\u30bf\u304c\u3042\u308b\u9818\u57df\u3092<code>__REL_START<\/code>\u3068<code>__REL_END<\/code>\u3068\u3044\u3046\u30ea\u30f3\u30ab\u5b9a\u6570\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306fGlobal Offset Table\u3082\u751f\u6210\u3055\u308c\u3066\u3044\u305f\u305f\u3081\u3001\u3053\u308c\u3082\u5bfe\u8c61\u3068\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30ea\u30f3\u30ab\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u3042\u308b\u3088\u3046\u306b\u3001\u6700\u521d\u306b\u306f<code>.start<\/code>\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u6765\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u306f<code>_start<\/code>\u95a2\u6570\u304c\u6765\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30a2\u30bb\u30f3\u30d6\u30ea\u3067\u8a18\u8ff0\u3057\u3066\u3001\u6697\u9ed9\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u53c2\u7167\u304c\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#&#91;unsafe(naked)]\n#&#91;unsafe(no_mangle)]\n#&#91;unsafe(link_section = \".start\")]\n\/\/\/ `a0` and `a1` must be reserved.\nextern \"C\" fn _start() {\n    core::arch::naked_asm!(\"\n    .extern  __REL_START, __REL_END\n    \/\/ This must be the first instruction\n    auipc   t0, 0\n    lla     t1, __REL_START\n    lla     t2, __REL_END\n    li      t3, 0xAA55\n    slli    t4, t3, 16\n1:\n    ld      t5, (t1)\n    srli    t6, t5, 16\n    bne     t6, t3, 2f\n    \/\/ t5 == 0x0000_0000_AA55_xxxx\n    xor     t5, t5, t4  \/\/ t5 ^= 0xAA55_0000\n    or      t5, t5, t0  \/\/ t5 |= t0(base_address)\n    sd      t5, (t1)\n2:\n    addi    t1, t1, 8\n    bne     t1, t2, 1b\n3:\n    j {main}\", main = sym crate::main);\n}<\/code><\/pre>\n\n\n\n<p>\u30d5\u30eb\u30a2\u30bb\u30f3\u30d6\u30ea\u3067\u3059\u304c\u3001\u3084\u3063\u3066\u3044\u308b\u5185\u5bb9\u306f\u81f3\u3063\u3066\u30b7\u30f3\u30d7\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u6700\u521d\u306b\u30ec\u30b8\u30b9\u30bf\u306b\u5024\u3092\u30bb\u30c3\u30c8\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>t0 : PC\u306e\u5024\u3001\u3053\u3053\u3067\u306f\u3059\u306a\u308f\u3061\u30d9\u30fc\u30b9\u30a2\u30c9\u30ec\u30b9\u304c\u683c\u7d0d\u3055\u308c\u307e\u3059<\/li>\n\n\n\n<li>t1 : <code>__REL_START<\/code>\u306e\u5024\u3092PC\u76f8\u5bfe\u3067\u8aad\u307f\u8fbc\u307f\u683c\u7d0d\u3057\u307e\u3059\u3001\u3053\u3053\u3067\u306f<code>auipc<\/code>\u547d\u4ee4\u3068<code>addi<\/code>\u547d\u4ee4\u306b\u5c55\u958b\u3055\u308c\u307e\u3059<\/li>\n\n\n\n<li>t2 : <code>__REL_END<\/code>\u306e\u5024\u304c\u683c\u7d0d\u3055\u308c\u307e\u3059<\/li>\n\n\n\n<li>t3 : <code>0xAA55<\/code>\u304c\u683c\u7d0d\u3055\u308c\u307e\u3059<\/li>\n\n\n\n<li>t4: t3 \u309216\u30d3\u30c3\u30c8\u5de6\u30b7\u30d5\u30c8\u3057\u305f\u5024\u3001\u3059\u306a\u308f\u3061<code>0xAA550000<\/code>\u304c\u683c\u7d0d\u3055\u308c\u307e\u3059<\/li>\n<\/ul>\n\n\n\n<p>\u30e9\u30d9\u30eb1\u304b\u30893\u307e\u3067\u306e\u9593\u3067t1\u30928\u30d0\u30a4\u30c8\u305a\u3064\u5897\u3084\u3057\u306a\u304c\u3089\u3001\u5024\u306e\u78ba\u8a8d\u3068\u66f4\u65b0\u3092\u884c\u3044\u307e\u3059\u3002\u8aad\u307f\u51fa\u3057\u305f\u5024\u309216\u30d3\u30c3\u30c8\u53f3\u30b7\u30d5\u30c8\u3057\u3066<code>0xAA55<\/code>\u3068\u6bd4\u8f03\u3057\u3001\u540c\u3058\u3060\u3063\u305f\u5834\u5408\u306f\u95a2\u6570\u30dd\u30a4\u30f3\u30bf\u3060\u3063\u305f\u3068\u5224\u65ad\u3057\u307e\u3059\u3002<code>0xAA55<\/code>\u306f\u30de\u30fc\u30ab\u306e\u305f\u3081\u3001\u3053\u308c\u3092XOR\u3067\u9664\u53bb\u3057\u305f\u5f8c\u3001\u30d9\u30fc\u30b9\u30a2\u30c9\u30ec\u30b9\u3092\u52a0\u7b97\u3057\u307e\u3059\u3002\u7d50\u679c\u3092\u66f8\u304d\u623b\u3057\u305f\u5f8c\u6b21\u306e\u30eb\u30fc\u30d7\u306b\u79fb\u884c\u3057\u307e\u3059\u3002\u7d42\u308f\u3063\u305f\u3089\u3001Rust\u3067\u66f8\u3044\u305fmain\u95a2\u6570\u306b\u98db\u3093\u3067\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u52d5\u4f5c\u78ba\u8a8d<\/h2>\n\n\n\n<p>\u3055\u3066\u3001\u3053\u3093\u306a\u96d1\u306a\u5b9f\u88c5\u3067\u52d5\u304f\u306e\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Starting application at 0x84000000 ...\nBoot Loader version 0.1.0\nLoader range:   &#91;        0x84000000 ~         0x84B74000]\nStack  range:   &#91;        0xFEEE2000 ~         0xFEEE7000]\nRAM:            &#91;        0x80000000 ~        0x100000000]\nReserved:       &#91;        0x80100000 ~         0x80140000]\nReserved:       &#91;        0x80140000 ~         0x80160000]\nAllocatable:    &#91;        0x80000000 ~         0x80100000]\nAllocatable:    &#91;        0x80160000 ~         0x84000000]\nAllocatable:    &#91;        0x84B74000 ~         0xFEEE2000]\nAllocatable:    &#91;        0xFEEE7000 ~        0x100000000]\nLoad the kernel...<\/code><\/pre>\n\n\n\n<p>\u306a\u3093\u3068\u52d5\u3044\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002\u52d5\u3044\u305f\u3068\u304d\u306f\u601d\u308f\u305a\u7b11\u3044\u304c\u51fa\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002<br>\u7591\u308f\u3057\u3044\u306e\u3067\u3001\u8aad\u307f\u8fbc\u3080\u5148\u3092<code>$ramdisk_addr_r<\/code>(\u8a66\u3057\u305f\u74b0\u5883\u3067\u306f<code>0x8C300000<\/code>)\u306b\u5909\u66f4\u3057\u3066\u3001\u300c\u30d3\u30eb\u30c9\u3057\u76f4\u3055\u305a\u306b\u300d\u518d\u5ea6\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Starting application at 0x8C300000 ...\nBoot Loader version 0.1.0\nLoader range:   &#91;        0x8C300000 ~         0x8CE74000]\nStack  range:   &#91;        0xFEEE4000 ~         0xFEEE9000]\nRAM:            &#91;        0x80000000 ~        0x100000000]\nReserved:       &#91;        0x80100000 ~         0x80140000]\nReserved:       &#91;        0x80140000 ~         0x80160000]\nAllocatable:    &#91;        0x80000000 ~         0x80100000]\nAllocatable:    &#91;        0x80160000 ~         0x8C300000]\nAllocatable:    &#91;        0x8CE74000 ~         0xFEEE4000]\nAllocatable:    &#91;        0xFEEE9000 ~        0x100000000]\nLoad the kernel...<\/code><\/pre>\n\n\n\n<p>\u3084\u3063\u3071\u308a\u52d5\u3044\u3061\u3083\u3046\u3089\u3057\u3044\u3067\u3059\u3002<code>Loader range<\/code>\u304c\u5909\u308f\u3063\u3066\u3044\u308b\u3053\u3068\u306b\u3082\u6ce8\u76ee\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3068\u3044\u3046\u308f\u3051\u3067\u3001\u4e16\u306e\u4e2d\u306f\u3084\u3063\u3071\u308a\u6ce5\u81ed\u3044\u30cf\u30c3\u30af\u3067\u56de\u3063\u3066\u3057\u307e\u3046\u3068\u3044\u3046\u3053\u3068\u3067\u3057\u305f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u8ffd\u8a18<\/h2>\n\n\n\n<p>\u4e0a\u306fQEMU\u3067\u5b9f\u9a13\u3057\u3066\u305f\u308f\u3051\u306a\u3093\u3067\u3059\u304c\u3001\u306a\u3093\u3068\u5b9f\u6a5f\u3067\u3082\u52d5\u3044\u3061\u3083\u3063\u305f\u3093\u3067\u3059\u3088\u306d\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Starting application at 0x40200000 ...\nBoot Loader version 0.1.0\nLoader range:   &#91;        0x40202000 ~         0xEB2C6000]\nStack  range:   &#91;        0xCC502000 ~         0xCC506000]\nRAM:            &#91;        0x40000000 ~        0x140000000]\nReserved:       &#91;        0x40000000 ~         0x40080000]\nAllocatable:    &#91;        0x40080000 ~         0x40202000]\nAllocatable:    &#91;        0xEB2C6000 ~        0x140000000]\nLoad the kernel...\n Physical Address  |  Virtual Address   | Memory Size  |  File Size   | File Offset  |  Alignment   | Read  | Write | Exec\n0x0000000040080000 | 0xFFFFFFE000000000 | 0x00000AAF18 | 0x00000AAF18 | 0x0000001000 | 0x0000001000 |  true | false |  true\n0x000000004012B000 | 0xFFFFFFE0000AB000 | 0x00000105C0 | 0x00000105C0 | 0x00000AC000 | 0x0000001000 |  true |  true | false\n0x000000004013C000 | 0xFFFFFFE0000BC000 | 0x0000014F7A | 0x0000014F7A | 0x00000BD000 | 0x0000001000 |  true | false | false\n0x0000000040151000 | 0xFFFFFFE0000D1000 | 0x0000000010 | 0x0000000010 | 0x00000D2000 | 0x0000001000 |  true |  true | false\n0x0000000040152000 | 0xFFFFFFE0000D2000 | 0x0000006AF8 | 0x0000000000 | 0x00000D3000 | 0x0000001000 |  true |  true | false\nKernel's entry point: 0xFFFFFFE000025CE6\nDump the initial page table for the kernel\nVA:         0x40202000 =&gt; PA:         0x40202000, R: true, W: true, E: true, U:false\n...         0xCC400000                0xCC400000 (fin)\nVA:         0xCC502000 =&gt; PA:         0xCC502000, R: true, W: true, E: true, U:false\n...         0xCC506000                0xCC506000 (fin)\nVA:         0xCC600000 =&gt; PA:         0xCC600000, R: true, W: true, E: true, U:false\n...         0xEB2C6000                0xEB2C6000 (fin)\nVA: 0xFFFFFF8000000000 =&gt; PA:                0x0, R: true, W: true, E:false, U:false\n... 0xFFFFFFC000000000              0x4000000000 (fin)\nVA: 0xFFFFFFE000000000 =&gt; PA:         0x40080000, R:false, W:false, E: true, U:false\n... 0xFFFFFFE0000AB000                0x4012B000 (fin)\nVA: 0xFFFFFFE0000AB000 =&gt; PA:         0x4012C000, R: true, W: true, E:false, U:false\n... 0xFFFFFFE0000BB000                0x4013C000 (fin)\nVA: 0xFFFFFFE0000BB000 =&gt; PA:         0x4013D000, R: true, W:false, E:false, U:false\n... 0xFFFFFFE0000CF000                0x40151000 (fin)\nVA: 0xFFFFFFE0000CF000 =&gt; PA:         0x40152000, R: true, W: true, E:false, U:false\n... 0xFFFFFFE0000D6000                0x40159000 (fin)\nJump to the kernel...<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u80cc\u666f (\u8a73\u3057\u3044\u4eba\u306b\u306f\u91c8\u8fe6\u306b\u8aac\u6cd5\u306a\u5185\u5bb9\u306a\u306e\u3067\u8aad\u307f\u98db\u3070\u3057\u3066\u304f\u3060\u3055\u3044\u3002) \u81ea\u4f5cOS\u3084\u81ea\u4f5cVMM\u3092\u3084\u3063\u3066\u3044\u308b\u969b\u306b\u554f\u984c\u306b\u306a\u308b\u306e\u304c\u3001\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u3092\u3069\u3046\u3059\u308b\u304b\u3067\u3059\u3002\u901a\u5e38U-Boot\u3084UEFI\u306a\u3069\u306e\u30d6\u30fc\u30c8\u30ed\u30fc\u30c0\u304b\u3089OS\u306e\u30ed\u30fc\u30c0\u304c\u8d77\u52d5 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1388","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/posts\/1388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/comments?post=1388"}],"version-history":[{"count":1,"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/posts\/1388\/revisions"}],"predecessor-version":[{"id":1401,"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/posts\/1388\/revisions\/1401"}],"wp:attachment":[{"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/media?parent=1388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/categories?post=1388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pg-mana.net\/blog\/wp-json\/wp\/v2\/tags?post=1388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}