質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

659閲覧

[NASM x64 Windows] scanf_s(またはscanf)で全角文字を入力したとき、のちのprintfで表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2024/01/07 06:58

実現したいこと

質問を投稿するのが初めてなので、ご指摘等あればお願いします。

アセンブリ言語初学者です。
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検索しましたが、当てはまりそうな検索結果は見つかりませんでした。

おそらく、かなり基本的なことでつまづいているのだと思います。
お教えいただければ幸いです。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2024/01/07 07:39

mov r8d, 100h r8d とはなんでしょうか
退会済みユーザー

退会済みユーザー

2024/01/07 07:46

下位ダブルワード…だそうですが、すみません、まだ理解できていません。 scanf_sの第3引数に数値を渡しているのだな、くらいにしか認識できていません。
hiroki-o

2024/01/07 07:54

手元の環境で試しましたが、提示されているソースで文字化けしないで動いています。
guest

回答1

0

ベストアンサー

以下の環境、手順で正しく動作しています。

確認環境

  • Windows 11
  • Visual Studio 2022
  • NASM 2.16.01

ソースコードをShift_JIS形式で保存。仮にtest.asmとする。

// nasm-shell
nasm -f win64 -o test.obj test.asm

// x64 Native Tools Command Prompt for VS 2022
link test.obj /subsystem:console /entry:main /out:test.exe kernel32.lib legacy_stdio_definitions.lib msvcrt.lib
(↑改行されているように見えても、1行で)

// コマンドプロンプト
test.exe

(参考)
https://stackoverflow.com/questions/64413414/unresolved-external-symbol-printf-in-windows-x64-assembly-programming-with-nasm

投稿2024/01/07 08:16

編集2024/01/07 08:37
hiroki-o

総合スコア1059

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2024/01/07 09:17

>ソースコードをShift_JIS形式で保存。 ここでした!いつもの癖でUTF8にしていました! こんな単純なことに気が付かなかったなんてお恥ずかしい限りです。 試していただいて、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問