86384


Windows 10 Pro 21H2 日本語版の環境で [StraceNT](https://github.com/ipankajg/stracent)
というツールについて調べています。

不可解なエラーに遭遇したのですが解決方法がわかりませんでしたのでアドバイスをいただけないでしょうか。

### 手順

簡単なトレース対象のプログラムとして次の内容のファイル hello.cs を作る

[code]

    using System;
    class Hello
    {
        public static void Main() {
            Console.WriteLine("hello, world");
        }
    }
    
[/code]

OS同梱のC#コンパイラでコンパイルして実行ファイル hello.exe を作り、動作確認する

[code]

    PS C:\tmp> C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe .\hello.cs
    Microsoft (R) Visual C# Compiler version 4.8.4084.0
    for C# 5
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240
    
    PS C:\tmp> .\hello.exe
    hello, world
    
[/code]

stracent.exe でトレースを実行する

[code]

    PS C:\tmp> .\stracent.exe .\hello.exe
    
    System Call Tracer for Windows XP - Windows 10. (Version: 0.9.3.0)
    Copyright (c): Pankaj Garg <pankaj@intellectualheaven.com>.       
    All rights reserved.
    
    Tracing command: [".\hello.exe"]
    
    Error: ?????????????????
    
[/code]

### 質問

なぜ hello.exe のトレースができないのでしょうか。

`stracent.exe notepad` では正しく notepad.exe のトレースができました。

`stracent.exe C:\Windows\notepad.exe` では同じエラーによりトレースできませんでした。


CC BY-SA 4.0
2022-02-16T02:01:02.737
86377
2022-02-16T12:24:25.333
2022-02-16T12:24:25.333
9873
9873
question
c# windows debugging
StraceNTの不可解なエラー


そのプロジェクトの info.txt の Supported platforms に 32bit OS または 64bit OS でも wow64
の中で動作する 32bit process だけトレース出来ると記述されています。  
[Supported platforms: -
stracent/hlp/info.txt](https://github.com/ipankajg/stracent/blob/master/hlp/info.txt#L55)

> Windows 2000  
>  Windows XP (32-bit)  
>  Windows 2003 (32-bit)  
>  Windows XP (64-bit) - For tracing 32bit process *only* running inside wow64  
>  Windows 2003 (64-bit) - For tracing 32bit process *only* running inside
> wow64

つまり正常に動作する、パスを指定しない`stracent.exe
notepad`だと、32bitアプリの`C:\Windows\SysWOW64\notepad.exe`が起動していると思われます。

C#のHello.exeは特に何も指定しなければ AnyCPU モードで作成され、64bit OSでは64bitモードで動作するのでしょう。

パスを指定した`stracent.exe
C:\Windows\notepad.exe`では、指定された`C:\Windows\notepad.exe`は64bitモードで動作するプログラムと言うことなのでしょう。

そうして64bitアプリのトレースは出来ないのでエラーになっていると思われます。文字化けはそういう未対応であることの副産物でしょうか。

C#のHello.exeを32bitアプリに特化した形でビルドするオプションがあれば、それを指定して試してみてはどうでしょう？


CC BY-SA 4.0
2022-02-16T07:35:05.270
86384
2022-02-16T07:35:05.270
26370
86377
answer