><https://twitter.com/orange_in_spacehttps://pawoo.net/@orange_in_space
そもそもの話をすると、そんな気楽に使いたくなるポピュラーな拡張命令は compiler intrinsics とかそれに近いレベルで提供されていてくれという話なので……
Delphi使ってた時には、インラインアセンブラでちょっとMMX命令呼ぶとかやってたので、その気軽さのつもりで出来たら便利そうではあるけど、よほどのレアケースじゃなければ普通に C# / .NETのコンパイラの最適化の方が賢く高速化しそう><;
まあ真っ当なコード組む人々にとっては、こんなおもしろいことができますよ、っていう話で今んところは収まってしまうね。
VirtualProtect系API自体そんなに頻繁には使わないので割とセキュリティ対策ソフトに疑われがち。
どこかのただのデスクトップマスコットソフトはIAT Hookとかのために使ってるけど。
それはそうだけど、それだったらC# の場合はネイティブ環境に対してでどうこうせずにAssemblyBuilderだっけ?>< 実行時に .NETなバイナリをコンパイルするやつ使ってマネージドでやるだろうからあれかも?><;
怪しいもなにも、 LL を十分高速に動かそうとしたら JIT が必要になるし、 JIT はそもそも機械語を動的に錬成しながらそっちを実行する機構なわけで、それはもう……
C# でなんかネイティブな事やりたければ、普通はC++かなんかでネイティブなDLL作ってそれを呼ぶでしょ、なんでわざわざこんなめんどくさくも妖しい事するんだよ 的な><;
昔はメモリ領域のフラグ立てる必要すらなかったのよ。NX bitはXP SP2あたりからだっけ…?
でもこれ、普多用しちゃったらセキュリティーソフトウェアのヒューリスティック解析(?)でマルウェアと誤判定されてもあんまり文句言えない程度に怪しすぎるやり方な気がする><;
Windowsに怒られたりするやつはVirtualProtectExで解除してますな。
Unmanagedな関数呼べるのは割と誰でも知ってるやつだけど、そうかしょせんバイト列だからメモリ領域に実行権限持たせてそのまま書いちゃえばいいんだ。
C# でx86マシン語プログラミング普通に出来るんだね・・・・><;「どうせなんかセキュリティー関連のエラーでWindowsに怒られたりするんじゃ無いの?><;」って思いながら実行したからびっくりした><;
さっきのC# でx86インラインアセンブラ・・・じゃなくインラインx86マシン語(?)、マジで?><;って事でさらにググってhttps://stackoverflow.com/a/53110027をやってみたらほんとに出来たし、add(0x01)をsub(0x28)に変えたらちゃんと引き算になったし「マジで!!!?><;」ってなった><;
頭痛><
なんでC# のbyte型ってなんか不便というかなるべく使わないで32bitでやってくれ感がすごくあれなのがあれかも><;(遅くなるから使わないではわかるけど、ほんとのほんとに8bitのデータを扱う時に色々めんどくさい><;)
妥協、諦め、挫折、濁るお茶><;
ていうか基本的にCPUの命令を使うのが普通っぽいので、逆に言うと自前でやるには使う頻度のわりには重い処理?><
あってたっぽいけどなんもわからん><https://github.com/dotnet/runtime/blob/05cb4b383ac9e55723ffc60a078ceddb6526ddb1/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs#L198
(間違えてる気がするから消した><;)
CPUの命令呼んでるっぽい><;
思考の /dev/null