Microsoft Learn の機械翻訳で意味が反対になっている例 2 つ
Microsoft Learn (旧 Microsoft Docs, MSDN)のサイトの技術解説は、機械翻訳のせいで意味が反対になっていることがあるので注意が必要です。
リンカーのオプションの説明が逆
たとえば以下は、リンカーのオプション「/BASE」についての説明ページです。
「セキュリティ上の理由から、実行可能ファイルのベース アドレスを /DYNAMICBASE 指定する代わりに、このオプションを使用することをお勧めします。」とあります。
日本語として少し不自然ですが、/DYNAMICBASE ではなく、このページで解説している /BASE を使うことを推奨しているように読めます。しかし、実際は逆です。
セキュリティを確保したいのであれば、ロードアドレスを固定する /BASE ではなく、ロードアドレスを動的に変える /DYNAMICBASE を使わなければなりません。
画面右上の「地球儀」アイコンをクリックして英語に切り替えると、英語では正しく解説されていることがわかります。
For security reasons,
Microsoft recommends you use the /DYNAMICBASE option
instead of specifying base addresses for your executables.
また、おもしろいことに、Edge ブラウザの右上の「Copilot」アイコンをクリックしてこの英語の翻訳を依頼すると、次のように正しい翻訳結果が表示されます。
セキュリティ上の理由から、
Microsoft は実行可能ファイルのベースアドレスを指定する代わりに、
/DYNAMICBASE オプションを使用することをお勧めしています。
やればできる子…。
呼び出し規約の説明が逆
以下は、x64 の呼び出し規約の説明ページです。
「x64 ABI では、RAX、RCX、RDX、R8、R9、R10、R11、および XMM0 から XMM5 のレジスタは volatile と見なされます。」とあり、その少し後ろに「x64 ABI では、RBX、RBP、RDI、RSI、RSP、R12、R13、R14、R15、および XMM6 から XMM15 のレジスタは volatile と見なされます。」とあります。
ということは、すべての汎用レジスタとすべての XMM レジスタが volatile(揮発性)であり、関数からリターンすると値が変わっている恐れがある、特に RSP(スタックポインタ)までどこに行っているかわからないとはなかなか攻めた仕様……なわけがありません。
画面右上の「地球儀」アイコンをクリックして英語に切り替えると、前者が volatile(揮発性)で後者が nonvolatile(不揮発性)である、と正しい解説が表示されます。
The x64 ABI considers the registers RAX, RCX, RDX, R8, R9, R10, R11,
and XMM0-XMM5 volatile.
The x64 ABI considers registers RBX, RBP, RDI, RSI, RSP, R12, R13, R14, R15,
and XMM6-XMM15 nonvolatile.
また、Edge ブラウザの右上の「Copilot」アイコンをクリックしてこの英語の翻訳を依頼すると、次のように正しく翻訳されます。
x64 ABI では、レジスタ RAX、RCX、RDX、R8、R9、R10、R11、
および XMM0-XMM5 は揮発性と見なされます。
一方、レジスタ RBX、RBP、RDI、RSI、RSP、R12、R13、R14、R15、
および XMM6-XMM15 は非揮発性とされています。
やればできる子…。
おわりに
日本語訳は参考訳、英語を読め、と言われるかもしれませんが、少なくとも上記の文章は、中国語のページでは正しく翻訳されているんですよね。
- 「出于安全原因,Microsoft 建议使用 /DYNAMICBASE 选项,而不是为可执行文件指定基址。」→ 正しい
- 「x64 ABI 考虑寄存器 RAX、RCX、RDX、R8、R9、R10、R11 和 XMM0-XMM5 的易失性。」「x64 ABI 考虑寄存器 RBX、RBP、RDI.TPL、RSI、RSP、R12、R13、R14、R15 和 XMM6-XMM15 的非易失性。」→ 正しい