実現したいこと
質問を投稿するのが初めてなので、ご指摘等あればお願いします。
アセンブリ言語初学者です。
printf、scanfを使ったコードを書いてみたく、チュートリアルサイトとc++コードの逆アセンブリ結果を参考にしました。
期待する結果は以下の通りです。
何か入力してね~。: abc123 abc123 だね~。
何か入力してね~。: あいうえお あいうえお だね~。
発生している問題・分からないこと
半角だと動作するのですが、
何か入力してね~。: abc123 abc123 だね~。
全角だと出力されません。
何か入力してね~。: abc123 だね~。
あるいは文字化けします。
何か入力してね~。: あいうえお だね~。
該当のソースコード
nasm
1bits 64 2default rel 3 4segment .data 5 msg db "何か入力してね~。: ", 0 6 fmt db "%s", 0 7 otp db "%s だね~。", 0xd, 0xa, 0 8 9segment .bss 10 arg resb 256 11 12segment .text 13global main 14extern ExitProcess 15extern _CRT_INIT 16 17extern printf 18extern scanf_s 19 20main: 21 push rbp 22 mov rbp, rsp 23 sub rsp, 32 24 25 call _CRT_INIT 26 27 lea rcx, [msg] 28 call printf 29 30 mov r8d, 100h 31 lea rdx, [arg] 32 lea rcx, [fmt] 33 call scanf_s 34 35 lea rdx, [arg] 36 lea rcx, [otp] 37 call printf 38 39 xor rax, rax 40 call ExitProcess
c++(逆アセンブリ)
1#include <stdio.h> 2 3int main() 4{ 500007FF6420410E0 sub rsp,138h 600007FF6420410E7 mov rax,qword ptr [__security_cookie (07FF642043000h)] 700007FF6420410EE xor rax,rsp 800007FF6420410F1 mov qword ptr [rsp+120h],rax 9 printf("何か入力してね~。: "); 1000007FF6420410F9 lea rcx,[string "\x89\xbd\x82\xa9\x93\xfc\x97\xcd\x82\xb5\x82\xc4\x82\xcb\x81`\x81B: " (07FF642042260h)] 1100007FF642041100 call printf (07FF642041020h) 12 13 char arg[256]; 14 scanf_s("%s", arg, 256); 1500007FF642041105 mov r8d,100h 1600007FF64204110B lea rdx,[arg] 1700007FF642041110 lea rcx,[string "%s" (07FF642042278h)] 1800007FF642041117 call scanf_s (07FF642041080h) 19 printf("%s だね~。", arg); 2000007FF64204111C lea rdx,[arg] 2100007FF642041121 lea rcx,[string "%s \x82\xbe\x82\xcb\x81`\x81B" (07FF642042280h)] 2200007FF642041128 call printf (07FF642041020h) 23 24 return 0; 2500007FF64204112D xor eax,eax 26} 2700007FF64204112F mov rcx,qword ptr [rsp+120h] 2800007FF642041137 xor rcx,rsp 2900007FF64204113A call __security_check_cookie (07FF642041160h) 3000007FF64204113F add rsp,138h 3100007FF642041146 ret
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
コードの基本的な記述はUnderstanding Windows x64 Assemblyを参考にしました。
「nasm x64 windows」「nasm multibyte scanf」「nasm multibyte printf」「nasm 日本語」「nasm 日本語 scanf」「nasm 日本語 printf」でGoogle検索しましたが、当てはまりそうな検索結果は見つかりませんでした。
おそらく、かなり基本的なことでつまづいているのだと思います。
お教えいただければ幸いです。
補足
特になし
回答1件
あなたの回答
tips
プレビュー