新しいものを表示
orange さんがブースト

そもそもの話をすると、そんな気楽に使いたくなるポピュラーな拡張命令は compiler intrinsics とかそれに近いレベルで提供されていてくれという話なので……

Delphi使ってた時には、インラインアセンブラでちょっとMMX命令呼ぶとかやってたので、その気軽さのつもりで出来たら便利そうではあるけど、よほどのレアケースじゃなければ普通に C# / .NETのコンパイラの最適化の方が賢く高速化しそう><;

orange さんがブースト

まあ真っ当なコード組む人々にとっては、こんなおもしろいことができますよ、っていう話で今んところは収まってしまうね。

orange さんがブースト

VirtualProtect系API自体そんなに頻繁には使わないので割とセキュリティ対策ソフトに疑われがち。

どこかのただのデスクトップマスコットソフトはIAT Hookとかのために使ってるけど。

それはそうだけど、それだったらC# の場合はネイティブ環境に対してでどうこうせずにAssemblyBuilderだっけ?>< 実行時に .NETなバイナリをコンパイルするやつ使ってマネージドでやるだろうからあれかも?><;

orange さんがブースト

怪しいもなにも、 LL を十分高速に動かそうとしたら JIT が必要になるし、 JIT はそもそも機械語を動的に錬成しながらそっちを実行する機構なわけで、それはもう……

C# でなんかネイティブな事やりたければ、普通はC++かなんかでネイティブなDLL作ってそれを呼ぶでしょ、なんでわざわざこんなめんどくさくも妖しい事するんだよ 的な><;

orange さんがブースト

昔はメモリ領域のフラグ立てる必要すらなかったのよ。NX bitはXP SP2あたりからだっけ…?

でもこれ、普多用しちゃったらセキュリティーソフトウェアのヒューリスティック解析(?)でマルウェアと誤判定されてもあんまり文句言えない程度に怪しすぎるやり方な気がする><;

orange さんがブースト

Windowsに怒られたりするやつはVirtualProtectExで解除してますな。

orange さんがブースト

Unmanagedな関数呼べるのは割と誰でも知ってるやつだけど、そうかしょせんバイト列だからメモリ領域に実行権限持たせてそのまま書いちゃえばいいんだ。

C# でx86マシン語プログラミング普通に出来るんだね・・・・><;
「どうせなんかセキュリティー関連のエラーでWindowsに怒られたりするんじゃ無いの?><;」って思いながら実行したからびっくりした><;

さっきのC# でx86インラインアセンブラ・・・じゃなくインラインx86マシン語(?)、マジで?><;
って事でさらにググって
stackoverflow.com/a/53110027
をやってみたらほんとに出来たし、add(0x01)をsub(0x28)に変えたらちゃんと引き算になったし「マジで!!!?><;」ってなった><;

なんでC# のbyte型ってなんか不便というかなるべく使わないで32bitでやってくれ感がすごくあれなのがあれかも><;(遅くなるから使わないではわかるけど、ほんとのほんとに8bitのデータを扱う時に色々めんどくさい><;)

ていうか基本的にCPUの命令を使うのが普通っぽいので、逆に言うと自前でやるには使う頻度のわりには重い処理?><

(間違えてる気がするから消した><;)

古いものを表示
:realtek:

思考の /dev/null