2021年6月

やぱくし?

Microsoft Visual C++ であれこれしていると、こんなシンボルに出くわす。

??2@YAPAXI@Z
??3@YAXPAX@Z

??は文字化けではなく、ASCIIコード0x3F ‘?’ そのもの。

ググると2番目くらいにMSDNのページが引っかかるんだけど、辿ってみると検索のページで、大量の検索結果があるものの単に 2 だけが引っかかっている(など)という状況。YAPAXI だけだと何も出てこない。

しょうがないのでコンパイルしたバイナリを逆アセンブルしてみると、”??2@YAPAXI@Z” はコンストラクタでクラスオブジェクトのサイズを渡して this(メモリ領域)を受け取っている。”??3@YAXPAX@Z” は this を渡して特に何も戻ってこない。まあ、結局 malloc() / free() みたいなもんですかね?

他を探してみると、スタティックリンクするとシンボルが重複して云々という内容ばかり出てくるんだけれど、中に operator new とか何とかいう記述もあったのでそういうことなんでしょう。

正しくはどこを調べるべきだったんですかね?(Microsoft のツールは普段使わないのでよくわからない)