トッツィーロール

忘れたころに記事を書く備忘録

VisualStudioのC++で文字列の暗黙キャストを有効にする(C2664,E0167)

VisualStudio2017以降でC++使用時に以下のような文字列リテラルをポインタに代入するようなコードを書く場合、デフォルトの設定ではエラーが発生します。

char *p = "test";

C++11以降ではこのような暗黙キャストが発生する書き方は標準となっていないためエラーとなるようです。
明示的にキャストするのが良いですが、古い大規模なソースコードを扱う場合、大量のエラーが発生し修正は困難です。
VisualStudioのプロジェクトのプロパティからC/C++→Language→Conformance mode(準拠モード)の設定をYes(/premissive)からNo(/premissive)に切り替えることで無効化できます。

参考文献
stackoverflow.com

Capstoneをビルドする

Capstone disassembly frameworkをubuntuでビルドする方法

デフォルトの設定でビルド

git clone https://github.com/aquynh/capstone.git
./make.sh

クロスプラットフォーム向けのビルド
ロスコンパイラをインストール

sudo apt install g++-arm-linux-gnueabihf
sudo apt install g++-aarch64-linux-gnu  //arm64

AndroidNDKを利用する場合

export NDK = ndkpath
./make.sh cross-android arm

arm64

export NDK = ndkpath
./make.sh cross-android arm64


参考
g0blin Research: Capstone Engine on Android
x86_64のUbuntuでC/C++のソースコードをARM/ARM64用にクロスコンパイルしてQEMUで実行する方法のまとめ - Qiita

Ubuntu 18.04 LTSにLLVM-toolchainをインストール

はじめに、llvm公式のサイト
https://apt.llvm.org/
からwgetでapt-keyを取得し、追加する。

wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -

リポジトリの設定とapt updateを実行する。※LLVMのバージョンを変えたい場合は9を変更する。

sudo apt-add-repository "deb http://apt.llvm.org/bionic/llvm-toolchain-bionic-9 main"
sudo apt update

installの実行

sudo apt install clang-9 clang-tools-9 clang-tidy-9 clang-format-9 lldb-9 lld-9 

参考文献
Ubuntu 18.04にaptでLLVM-9をインストール - みつきんのメモ

VMware上で構築したUbuntuにおいてゲストとホスト間のファイル共有ができない場合の解決方法

VMware上でUbuntuを利用する場合、vmware-toolsまたはopen-vm-toolsを利用すると思います。

VMwareの設定でファイル共有を有効にした場合、共有フォルダはUbuntu側では/mnt/hgfs/にマウントされます。

vmware-toolsがインストール済みであるにも関わらず/mnt/hgfs/以降フォルダが表示されない場合はvmware-toolsの不具合によるものです。

解決策1:vmware-toolsを再インストールする
解決策2:vmware-toolsが再インストールできない(VMwareウィンドウの管理→vmware-toolsの再インストールが選択できない)または、open-vm-toolsを利用してファイル共有をしたい

解決策2の詳細についてメモします。
参考文献からの引用です。

open-vm-toolsをインストール(デスクトップ拡張)

sudo apt install open-vm-tools-desktop

/mnt/hgfs/をマウントする。

sudo vmhgfs-fuse -o allow_other -o auto_unmount .host:/ /mnt/hgfs

永続的にマウントする場合、エディタで/etc/fstabに下記を追加

sudo gedit /etc/fstab
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,auto_unmount,defaults 0 0

参考文献
ubuntu 18.04インストール (2) vmware tools - kashiの日記

VisualStudioでC++利用時にBOM無しUTF-8だと warning C4819 が発生する

githubから落としたCMakeプロジェクトをビルドするときに詰まったのでメモします。

VisualStudio 2017においてソースコードやその他、CMakeの場合はCMakeList.txtなどビルドに必要なファイルがBOM無しUTF-8で保存されている場合、UTF-8エンコードされていることを認識できなくなるためwarning C4819が発生し大量にエラーが出ました。
大量に発生するエラーは一見文字コードとは関係のないエラーでばかりであったため
原因がBOMの有無であることに気づくまで時間がかかりました。
解決策としては、BOM無しで保存されているファイルをBOM有に変換して保存すれば良いです。
プログラマ向けや高性能なエディタ、最近のWindowsではBOMの有無を変更して保存しなおせます。
今回では変換が必要になるファイルが大量にあったため、NonCodeNetというソフトウェアを使用しました。

VisualStudioの場合、C#はBOMの有無は影響しないらしく、C/C++の場合はBOM有でないと
コンパイルできないとのこと。

AndroidStudioでデバッグ中にバイト配列の内容を取得(Copy value)する方法

デバッグ中に変数の内容をクリップボードにcopyする場合、
通常はCopy Valueで値を取得できますが、配列の場合はそのままではコピーできませんでした。
デバッグ中にAlt + F8またはEvaluateウィンドウを開き

Arrays.toString(inputBytes)

の評価コードを入力し、バイト配列を文字列に変換して表示することで
[ 54, -45, 71, -119]のようなバイト配列を取得できます。

参考文献
stackoverflow.com

Windowsでネットワークアダプタ/NICに関する情報を表示する方法

WMIを利用します。
cmdにて以下を実行。

wmic nicconfig list full 


ネットワークアダプタのGUIDを特定するには、上記のコマンドを実行して表示された情報の
SettingID項目を確認する。
また、レジストリからも確認できる。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards

対応するアダプタのServiceNameの値を確認する。




参考
http://www.wannko.net/command/wmi/nicconfig.html
http://www.thinkpad-club.net/modules/d3forum/index.php?topic_id=2991