X



チート初心者スレpart3
0001ネトゲ廃人@名無し
垢版 |
2021/03/20(土) 04:57:22.63ID:w3NH87DE
ミジンコ同士勉強していこうぜ


●定番解析ソフト

・デバッガ OllyDbg

http://www.ollydbg.de/

・プロセスメモリエディタ兼デバッガ スペシャルねこまんま57号

http://www.vector.co.jp/soft/win95/hardware/se254476.html

・プロセスメモリエディタ兼デバッガ+加速器 うさみみハリケーン

http://www.vector.co.jp/soft/win95/prog/se375830.html

●解析参考サイト

・Digital Travesia ※OllyDbg日本語化パッチあり

http://hp.vector.co.jp/authors/VA028184/


チート中級者・上級者用のスレ

https://medaka.5ch.net/test/read.cgi/mmosaloon/1569609647/l50


前スレ チート初心者スレpart2

http://schiphol.2ch.net/test/read.cgi/mmosaloon/1210219737/
0515ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 15:28:07.96ID:???
言語仕様よく知らんが、文字列や数値だと値がコピーされて値渡しになってんじゃね?
Editのようなオブジェクト渡せば参照渡ししてくれんじゃね?
0516ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 17:39:02.98ID:???
>>515
それだ!と思ったのですが調べた見たところオブジェクトは参照渡ししかできないようなので
違うと思います。

オブジェクト
以下の型は オブジェクト である
テーブル
Luaのテーブルは動的に確保された オブジェクト
関数
スレッド
ユーザーデータ
オブジェクトは変数の格納されず、参照されるのみである
代入、引数渡し、関数の返り値は、コピーではなく参照が渡される
テーブルついて
0518ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 18:35:43.14ID:???
form.CEEdit16.text=10000
→フォームの数字が1万になる

function f1(text1)
text1=10000
end
f1(form.CEEdit16.text)
→フォームの数字が変わらない

実験して上記の通りになったんで
本来オブジェクトは参照渡しのはずなのに参照渡しされないっぽいです。
>>517
そっちにも聞いてみます。
0519ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 18:45:51.94ID:???
すごい初歩的で致命的なバグが放置されていたんだね
ヒーローになれるかもしれませんね
0520ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 19:11:40.67ID:???
>>519
どうも書き換えるだけでなく読み込む方でも関数の引数にeditオブジェクト使えないっぽいんで
やっぱeditオブジェクトのバグなのかなぁと思ったりもします。
0521ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 19:15:53.16ID:???
はーチュートリアルに実装されてない機能使えとかあったり
フォームはコピペすらできないし
コードに{$lua}って書いてなかったり(チュートリアルに書かれてあるコードだとコンパイルすらできない)
editオブジェクトは引数に使えなかったり
ゴミすぎんだろCE……
0522ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 22:12:35.88ID:???
forumで効いたら
unction f1(text1)
text1.text=10000
end
f1(form.CEEdit16)
とのことでした。
型指定とかゆるゆるなのにこういうところは厳しいのか…
0523ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 22:19:50.99ID:???
writeFloat("[game.exe+01016E44]+660",v_default[1]+text1.text/1000)
でうまくいくのですが、後の改変に備えてモジュール化したいので
offset=0x630
writeFloat("[game.exe+01016E44]+offset+30",v_default[1]+text1.text/1000)
としたらうまくいきません。
どうすればよいでしょうか?
0525ネトゲ廃人@名無し
垢版 |
2023/04/16(日) 23:55:17.64ID:???
>>524
630+30で660では?
readFloat("[game.exe+01016E44]+5d0")では狙い通りのアドレスの値を読み込んでいるため
writeFloat("[game.exe+01016E44]+660",v_default[1]+text1.text/1000)
の+660の部分は+0x660であり+630+30に変えても問題ないため
>>523
と判断しました。
んで結局うまく行ってないです。
0526ネトゲ廃人@名無し
垢版 |
2023/04/17(月) 00:14:00.51ID:???
10進数と16進数で違うが合ってると判断してるのなら原因わからんわ
すまんな
0527ネトゲ廃人@名無し
垢版 |
2023/04/17(月) 00:51:42.16ID:???
>>526
いえ、相談にのって頂きありがとうございました。

改めて検証した所こうなりました。
writeFloat("[game.exe+01016E44]+660",v_default[1]+text1.text/1000)
→うまくいく
writeFloat("[game.exe+01016E44]+0x630+0x30",v_default[1]+text1.text/1000)
→うまくいく
offset_1=0x630
writeFloat("[game.exe+01016E44]+offset_1+0x30",v_default[1]+text1.text/1000)
→うまくいく

function f2(offset)
writeFloat("[game.exe+01016E44]+offset+0x30",v_default[1]+text1.text/1000)
end
offset_1=0x630
f2(offset_1)
→うまくいかない(errorはでない)

うまくいかない理由が分かる方いらっしゃいませんか?
0529ネトゲ廃人@名無し
垢版 |
2023/04/17(月) 04:12:40.37ID:???
開発者に向かってstupidは草
文句だけじゃなくて改善案くらい一緒に書いとけよw
自分で暗に文字列はオブジェクトじゃないとか言っておきながら参照渡しにならないって文句いってるのも草だよな
0531ネトゲ廃人@名無し
垢版 |
2023/04/18(火) 20:41:40.83ID:???
>>527
さらに検証して
function f2(offset)
local o1=offset
writeFloat("[game.exe+01016E44]+o1+0x30",v_default[1]+text1.text/1000)
end
offset_1=0x630
f2(offset_1)
→うまくいく

でうまくいきました。マジでなんで。
本当に意味不明ですがとりあえず目的は達成しました。
0532ネトゲ廃人@名無し
垢版 |
2023/04/18(火) 22:38:53.42ID:yRvVNGuH
function f1(offset,vector)
local o1 =offset
vector[1]=readFloat("[game.exe+01016E44]+o1+30")
end
vector1={0, 0, 0}
offset1=0x630
f1(offset1,vctor1)
→うまくいかない

ためしに下記をしてみると
function f2(offset,vector)
local o1 =offset
vector[1]=readFloat("[game.exe+01016E44]+o1+30")
print(vector[1])
print(vector1[1])
end
vector1={0, 0, 0}
offset1=0x630
f1(offset1,vector1)

0.086963586509228
0
で(本来参照渡しであるはずなのに)値渡し状態になってることがわかったんですけど
これどうすればいいでしょうか。
0533ネトゲ廃人@名無し
垢版 |
2023/04/19(水) 04:34:38.04ID:???
コンパイル必要な言語だとf2の中に出てくるvector1って未定義なんでエラーになるんじゃね?
luaが未定義だからよろしくやってくれて0にしてるとかじゃね?
その書き方だったらf2の前にvector1宣言しとくべきじゃね?
値渡しになってっるってのであれば、f2でreturnして、その値を受け取りゃいいだけじゃね?
0534ネトゲ廃人@名無し
垢版 |
2023/04/19(水) 08:05:01.52ID:???
readFloatとwriteFloatは内部で文字列を解釈してる
そもそもluaの変数名を入れて動いてる事自体が奇跡
たぶんローカル変数しか解釈できないんじゃないの
local address = string.format("[game.exe+0x01016E44]+0x%X+0x30", offset)
local result = readFloat(address)
こうすれば絶対動く
0535ネトゲ廃人@名無し
垢版 |
2023/04/19(水) 09:14:42.42ID:???
覚えたてのcall by referenceって言いたいだけとか?
call by valueだったとすると型がわからないから何をどこまでコピーすればいいかのコストが高そうな気がする
0536ネトゲ廃人@名無し
垢版 |
2023/04/19(水) 19:36:16.14ID:???
>>534
cheatengineformで >>534 さんの言う通りだと教えてもらいました。
>>534 さんのコードの方が私のより可読性が高いものの行数が増えるなぁどうしようと思っていた所、
function f2(offset)
writeFloat(readPointer"game.exe+01016E44"+offset+0x30,v_default[1]+text1.text/1000)
end
というコードを教えてもらいました。一番シンプルでわかりやすいのでこれでいこうと思います。
0537ネトゲ廃人@名無し
垢版 |
2023/04/19(水) 20:39:20.76ID:???
こんな適当なことしか言わない所で聞かずに本家に行ったほうがいいんじゃね?
0538ネトゲ廃人@名無し
垢版 |
2023/04/19(水) 21:01:02.50ID:???
>>532
この件ですが
function f1(offset,vector)
vector={0, 0, 0}
vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30)
end
vector1={0, 0, 0}
offset1=0x630
f1(offset1,vctor1)
→うまくいかない
ってのが正しくて試しに
function f3(offset,vector)
vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30)
end
vector1={0, 0, 0}
offset1=0x630
f1(offset1,vctor1)
→うまくいく
となりました。

関数内で引数の型指定のためにゼロベクトルを代入していたのを辞めた結果うまくいくようになったのですが、
これはどういうことなんでしょうか。ゼロベクトルを代入した結果、vectorとvector1の関係が切れたと見て
いいんでしょうか
0539ネトゲ廃人@名無し
垢版 |
2023/04/19(水) 23:25:41.98ID:???
別オブジェクトの参照で上書きしちゃったんで元オブジェクトが書き変わらないのは当然じゃね?
0540ネトゲ廃人@名無し
垢版 |
2023/04/20(木) 19:59:46.88ID:???
>>539
ということは
function f1(offset,vector)
vector[1]=0
vector[2]=0
vector[3]=0
vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30)
end
vector1={0, 0, 0}
offset1=0x630
f1(offset1,vctor1)
だとうまくいくということでしょうか。
さらに言えばvector={0, 0, 0}は単純に値を書き換えるという意味ではない何かで
vector[1]=0は単純に値を書き換えるという意味でしょうか
python辺りだと一括代入できて楽なんだけどめんどくさい感ある
0541ネトゲ廃人@名無し
垢版 |
2023/04/20(木) 20:58:24.85ID:???
Python知らんけどLuaでも{0, 0, 0}で初期化された新しいオブジェクト(インスタンス)作ってんじゃねーの?
一括代入っつーなら長さ10くらいの配列に{0, 0, 0}代入して配列の長さ確認してみりゃいいだけじゃね?
0542ネトゲ廃人@名無し
垢版 |
2023/04/21(金) 04:48:17.91ID:???
CEだとオブジェクトのアドレス表示できない?
アドレス比較はできるのでどんな結果になるか確認してみれば?
a={0, 0, 0}
b=a
if a == b then print("1") end
b[1]=1
if a == b then print("2") end
b={0, 0, 0}
if a == b then print("3") end
0543ネトゲ廃人@名無し
垢版 |
2023/04/21(金) 20:41:04.87ID:???
>>542 さんのを実行すると
1
2
とでました。また
a=0
b=a
if a == b then print("1") end
b=1
if a == b then print("2") end
b=c
if a == b then print("3") end
を実行すると
1
とでました。ということは基本的に代入すると参照関係が切れるけど
配列の成分に値を入れる場合は特別に参照関係が切れないということで
いいんでしょうか。
0544ネトゲ廃人@名無し
垢版 |
2023/04/21(金) 22:10:08.66ID:???
ただ単に参照って言いたかっただけで実際は何もわかっていなかった人で草
オブジェクトの変数は簡単に言うとデータが入ってるメモリの先頭アドレス
配列の各要素は先頭アドレスからのオフセットでアクセスする(正確には違うけど)
その変数に別データの先頭アドレス入れちゃったらどうなるよ?ってことだよ

あとは、自分で試したのがオブジェクトじゃなくて数値使ってるのも理解できてない証拠
そこはb=cじゃなくてb=0だろ
0545ネトゲ廃人@名無し
垢版 |
2023/04/22(土) 17:55:17.42ID:???
>>544
>オブジェクトの変数は簡単に言うとデータが入ってるメモリの先頭アドレス
>配列の各要素は先頭アドレスからのオフセットでアクセスする(正確には違うけど)
それとb=1をするとbとaの参照関係切れる切れない関係なくないですか?
配列の構造についての解説自体はありがたいですが…
0546ネトゲ廃人@名無し
垢版 |
2023/04/22(土) 20:13:40.89ID:???
論点ずらすなよ
オブジェクトの話してんのにb=1とか値の話を持ち込んで混乱させてるのはそっちだろ

a={0,0,0}って内部では下のような処理してる
 a={} ←どこかのメモリを新規に確保、aにアドレス返す、仮にaddr1とする
 a[1]=0 ←writeFloat(addr1+offset+0, 0)
 a[2]=0 ←writeFloat(addr1+offset+4, 0)
 a[3]=0 ←writeFloat(addr1+offset+8, 0)
b=a ←bにもaの参照であるアドレスaddr1が入る
b[1]=1 ←writeFloat(addr1+offset+0, 1)
ここでは参照先のアドレスaddr1の指す先のデータ書き換えてるだけで、bのアドレス変える操作しとらんだろ?
b={0,0,0} ←aと同じように新規にメモリ確保、別メモリなのでaddr1とは違うaddr2がbに入る
ここでbはaの参照ではなく別データの参照に置き換わったってだけ
参照切れたとか言ってるけど参照切ってるのは君が書いたコード

参照って君が思ってるような選ばれた人しか使えないような高度な考えじゃなくて単なるデータが格納されているメモリのアドレスを指してるだけのものだよ?
0547ネトゲ廃人@名無し
垢版 |
2023/04/22(土) 23:51:19.07ID:???
>>546
じゃあ結局基本基本的に代入すると参照関係が切れるけど
配列の成分に値を入れる場合は特別に参照関係が切れないということですね
あと配列のパターンじゃなくて
b=1などの数値のパターンだとどうなるんですか?
0548ネトゲ廃人@名無し
垢版 |
2023/04/23(日) 00:47:44.80ID:???
基本的とか特別って何だよ?
配列の要素に値を設定する処理はbが指してるアドレスにあるデータを更新してるだけで、b自身のアドレスは変更してないだろ?
0549ネトゲ廃人@名無し
垢版 |
2023/04/23(日) 11:16:35.59ID:???
もう数値とか参照関係ないだろ?
値がコピーされるだけで変数の間には何の関係もない
参照になるのはオブジェクトだけって自分で言ってただろ
0550ネトゲ廃人@名無し
垢版 |
2023/04/25(火) 14:13:40.06ID:???
>>549
じゃあ結局代入すると参照関係が切れるけど
配列の成分に値を入れる場合は参照関係が切れないということですね

b=1の場合でもメモリ確保して1の値がそこで保持されてb自体にはアドレスを返す
であってますか?
0551ネトゲ廃人@名無し
垢版 |
2023/04/25(火) 18:12:00.70ID:???
lua言語の実装としてはデータの入ったアドレスとして管理してるんだろうよ
処理の中で変数bに数値入れたの知ってるから、変数bが指定されたら数値で返してるってだけ
使う側としては0入れたのにアドレスの数値が入ってたらおかしいだろ?

もう悔しくて屁理屈こねて突っ掛かってるだけにしか見えんよ
ソース読めば仕様もバグも全て書かれてるよ
0552ネトゲ廃人@名無し
垢版 |
2023/04/26(水) 16:18:36.91ID:???
>>550
実装によるとしか言えない
いちいち4バイトのメモリを確保してアドレスを保持しているかもしれないし
4バイトではなく8バイトかもしれないし
スタックに保持しているかもしれないし
起動時に予め確保しておいたメモリ領域を使っているかもしれないし
高速化のためにメモリを使わずにレジスタだけを使っているかもしれない
わからんけど動けばよくね
0553ネトゲ廃人@名無し
垢版 |
2023/04/26(水) 18:58:50.59ID:???
lua実装側の変数のメモリ管理とlua利用側の変数の見え方が混乱しているっぽい
あとは参照というキーワードにこだわりを持ってる
0555ネトゲ廃人@名無し
垢版 |
2023/04/28(金) 23:43:47.10ID:???
>>552
実装によるというのは実行するアプリ(この場合ではcheatengine)という意味ですか?
0556ネトゲ廃人@名無し
垢版 |
2023/04/29(土) 08:25:15.56ID:???
君は実装とか言い出す前にluaの言語仕様理解しなさい
実装知りたかったらソース読みなさい
0557ネトゲ廃人@名無し
垢版 |
2023/04/29(土) 09:19:10.08ID:???
>>555
質問を読み直してみたけど変数はすべてアドレスの別名だと思って構わない
aという変数を宣言するとLuaが勝手に0x1000000を割り当ててくれるみたいな
その前提があったうえで、さらにaがテーブルの場合は0x1000000に実データが存在する別のアドレス0x2000000を書き込むということ
0x1000000にすべてのデータを書き込めばいいと思うかもしれない
けど0x1000004にはbという変数が割り当てられてるかもしれないから、そのばあい上書きすることになる
そして上書きを避けるために代入のたびに再割当てをすると処理が重くなってしまう
だから妥協の結果としてテーブルの代入で奇妙な挙動が生まれる
直感どおりの代入がしたいならDeepcopyで調べるといい
たしかPythonも同じ問題を抱えてたはず
0558ネトゲ廃人@名無し
垢版 |
2023/04/29(土) 09:35:17.40ID:???
質問に答え忘れてたからもうひとつ
>>555
そう
けどテーブル代入の奇妙な振る舞いを理解するためにはそこまで考える必要はない
0559LC Production
垢版 |
2023/04/29(土) 18:53:43.55ID:Wp8DYy46
c++でメモリにアクセスして、
敵の情報を取得し、
そのあとメモリを書き換えて視点を移動させる。
コードは教えれないけどそんな感じでチート作れまっせ
0560ネトゲ廃人@名無し
垢版 |
2023/04/29(土) 21:32:38.26ID:???
>>557
deepとかshallowとかの話じゃない
テーブルを関数に渡して、引数の変数を関数内で{0,0,0}で初期化したら呼び出し元に反映されなくなったってのが始まり
その引数をbとすると、b={0,0,0}の代入では参照無くなるのに同じ代入のb[1]=1をすると呼び出し元にも反映されるが違いが理解できないって話
そこで変数はアドレスだという話をしたら、参照は関係ない数値の話を持ち出して数値の変数もアドレスなら~みたいなluaとしての振る舞いと実装が入り雑じった話になってる
0561ネトゲ廃人@名無し
垢版 |
2023/04/30(日) 01:44:56.64ID:???
なるほどね
こだわりがないならreturnに返り値を乗せて呼び出し元で代入すればいい
どうしても参照渡しがしたいならこうするとか?
function f(offset, pVector)
pVector[1] = {0,0,0}
pVector[1][1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30)
end
offset1 = 0x630
vector1 = {0, 0, 0}
f(offset1, {vector1})
今テストできる環境にいないから動くか知らんけど
0563ネトゲ廃人@名無し
垢版 |
2023/05/01(月) 21:34:01.79ID:???
>>560
質問した側がこういうのも失礼なのは承知してますが
あなたはもう質問に応えないでください。
自然言語でのコミュニケーションに難があるのか、質問が終わって次の質問に移行したことを理解してないし
藁人形論法で私のレスを歪曲した上で罵倒してくるのは不愉快です(参照参照一番わめいてるのはあなた自身であることに気付きましょう)
色々ためになった部分がありますが意思疎通が困難でとてもしんどいのでもうこれ以上反応して頂かなくても結構です。
0565ネトゲ廃人@名無し
垢版 |
2023/05/14(日) 14:28:30.85ID:3mWaNf6U
てすと
0566ネトゲ廃人@名無し
垢版 |
2023/05/14(日) 14:28:57.87ID:3mWaNf6U
こんにちは。androidエミュレータでCheatEngineのデバッグに成功した方いますか?
windows10環境でCheatEngine7.5のデバッガをbluestacks5(nougat 32bit)で起動している
fgoというアプリにアタッチしても、設定したブレークポイントで止まりません。
そこで、
https://www.cheatengine.org/forum/viewtopic.php?t=587796&sid=f96bbe572780137c660fc96f23d51099
このサイトの通りにroot化したbluestacks側でceserverX86を起動し、windows側の
チートエンジンからネットワーク越しにfgoのプロセスを開きました。メモリスキャン&書き換えは
ceserver非使用時同様問題なくできます。しかしデバッガをアタッチするとfgoがクラッシュします。
ceserverのログはptrace errorなどがでます。
ceserverArm32などすべてのバージョンを試しましたが、デバッグアタッチ時に
今度は全部のレジスタが使われているなどのエラーがでます。有識者いますでしょうか?
0567ネトゲ廃人@名無し
垢版 |
2023/05/14(日) 14:41:17.94ID:3mWaNf6U
>>566
続きです。
チートエンジンのデバッガの種類を変更したりはしました。
色々調べているとバージョンによってうまくいくいかないがあるそうです。
また、自分でCEサーバーをコンパイルして成功した人もいるようです。
レジスタall usedエラーはANDROID実機では起きず、仮想CPUだから起きるとの見解もありました。
しかし上記サイトの人は間違いなくエミュレータで成功してます。
これからceserverを自分でビルドしたものに変更したり、
過去のチートエンジン、サーバーのバージョンに変えたり、
androidバージョンを9や11に変えたりしようとは思っています。
最悪安い実機の購入も考えてます。
最近チートエンジンに手を出したので色々手探りでやってますが、わかる方いましたら是非教えてほしいです。
0568ネトゲ廃人@名無し
垢版 |
2023/05/20(土) 15:11:53.95ID:jhXCnLLY
>>567
成功しました。お騒がせしました。
0569ネトゲ廃人@名無し
垢版 |
2023/05/20(土) 15:40:26.97ID:???
どうやって成功しました?
自分も過去にやってうまくいかなかったのでよければ教えてください
0570ネトゲ廃人@名無し
垢版 |
2023/05/22(月) 13:26:46.68ID:RqMx9qsL
>>569
test
0571ネトゲ廃人@名無し
垢版 |
2023/05/22(月) 13:30:25.44ID:RqMx9qsL
>>569
>>569
結局実機買いました。pixel 3a中古整備品です。amazonだと13000円で買えます。やはりレジスタused errorは仮想CPUが原因でした。あとpixel3-aはarm64なのでサーバもarm64を起動します。アドレス参照、書き込み、ブレークポイントでちゃんと止まってレジスタも見れます。あとandroid10ではroot取ってもsystemに書き込めなかったので9にダウングレードしました。
https pwnyourphone.com/
このサイトのツールはandroid10以降のデバイスでsystemの書き込み権限を取るツールなのですが、結構色々頑張っても無理でした。開発者に聞いても無理でした。成功デバイスリストがあるんですけど大体XiaomiかGaraxyです。開発者の回答「HUAWEI などを使用していない限り、Android 9 には悪名高いshared_blocks 読み取り専用機能も EROFS (拡張読み取り専用ファイル システム) も、私の知る限りではありません。」とのことです。なので実機を買う場合はandroid9対応、もしくは10なら上記のセキュリティを突破できるデバイスでないとceserver起動できないかもです。
0572ネトゲ廃人@名無し
垢版 |
2023/06/08(木) 23:03:00.77ID:???
ポインターを指定する際にマイナスのオフセットってありえますか?
ありえるのであればどういうデータ構造だとありえるんですか?
0577ネトゲ廃人@名無し
垢版 |
2023/06/11(日) 09:15:58.50ID:???
データサイズ的に奇数になるような構造体だと分かりやすいね
自分でサンプル書いてアドレスや内容ダンプするのが理解が早いな
sizeof使ってみれば一発でわかるし
0578ネトゲ廃人@名無し
垢版 |
2023/06/17(土) 06:10:15.82ID:???
構造体の配列自体はなんとなく
メモリアライメント自体はある程度きちんと
理解しました。ただこれらがどうマイナスのオフセットに繋がるかよくわかりませんでした。ごめんなさい。

あと別件ですが12*7*4byte=336byteのメモリの状態をネット掲示板でたやすく交換できるような
シリアルコード的な短い暗号にする方法って何かありませんか?
0585ネトゲ廃人@名無し
垢版 |
2023/06/27(火) 18:01:18.28ID:vEbqGmyr
初心者はツールに頼る前にCとアセンブラ勉強すれば?
仮想マシンでイチから入れればセットアップも躓かないでしょ。
C: VisualStudioとMSVC++
アセンブラ: Netwide Assembler
(godbolt.orgでC->ASMがどうなるか見れる。)

Practical Malwareナンチャラとか、ゴミみたいな日本語の教材(ツールの貧相な紹介)みたいな低レベルの本読むからいかん。
実践て書いてある本は矛盾してることに気づけ。言語の教本(ネットでも良いやつは探せる)読んで自分で始めるのが一番。

Cの構文、ポインタの概念、アセンブラは3、4文字でできた単語と代入の方向、副作用を覚えるだけ。
小学校でYes, It is a pen.だとか、ヨウ素がでんぷんと...ってのを順番に覚えるのと何も変わらん。

"The importance of small steps"って調べてみ。
1から10知るなんて誰も出来ないよ。興味があるから1から10まで全部覚えるだけ。

以上が理解できないなら向いてない。分かってるならそのうちできるようになるから頑張れ。
ところで
>>0572
そのポインタより手前に有効なデータがあるならいつでもそうできるんじゃない?
だから、継承とかリンクトリスト、構造体の配列なんかはそうなるかもしれないね。
アセンブラ読んでてそれがでてきたなら、コンパイラがそうしたかったとしか。
例えば、int * hoge = &fuga->b;だと、fugaのbはhoge[-1]で触るとかね。
0586ネトゲ廃人@名無し
垢版 |
2023/06/27(火) 18:03:31.85ID:vEbqGmyr
>>585
の安価より下が
>>572
への返信ね。


バカすぎて安価の書き方間違えた。
0587ネトゲ廃人@名無し
垢版 |
2023/06/27(火) 18:05:01.70ID:vEbqGmyr
> 例えば、int * hoge = &fuga->b;だと、fugaのbはhoge[-1]で触るとかね。
あとfugaのbじゃなくてfugaのa。頭回ってないなぁ...
連投ごめんね
0588ネトゲ廃人@名無し
垢版 |
2023/06/27(火) 22:37:05.71ID:???
まぁボチボチ調べながらやってます。

話は変わりますが
浮動小数点の演算で、任意の小数を引数にした演算、を考えているのですが
誤差が出にくい演算のコーディングのコツってありますか?
なるべく整数演算にするってのは常道だとは思いますが今回考えているのは
任意の小数を引数にした演算なのでそれ以外の方法でコツ があれば教えてください
0589ネトゲ廃人@名無し
垢版 |
2023/06/28(水) 00:10:34.77ID:wvfY4N8I
>>588
スレチだしそのくらいググレカス。
精度は型に依るので、単、倍、四倍と扱える桁数は変わってくる。

そもそも小数精度の意味間違えてる。最初から0.9100..00じゃなくて0.91000035..82みたいなのを扱えばズレるわけで。コーディングとかの問題じゃあない。

高精度な浮動小数点を自前で実装するしかないね。

リサーチ癖付けな〜
0590ネトゲ廃人@名無し
垢版 |
2023/06/29(木) 11:19:25.66ID:???
Javaが使えるならプロセス間通信で引数を受け取ってBigDecimalで計算して返すツールを作って常駐させればよさそう
結果を浮動小数点に落とし込むまでは誤差ゼロ
処理速度はだいぶ犠牲になるだろうけど
0591ネトゲ廃人@名無し
垢版 |
2023/06/29(木) 11:32:46.32ID:n3XgK3mH
>>590
別に任意精度小数はJavaの専売じゃないからどの言語にも実装はあるよ…
あとどっちも浮動小数点ね。2進数に落とし込むまでは、が正解。

自分が重箱したいだけだけど、"演算のコーディングのコツ"と聞かれたら計算そのものの話。
>>588はそもそも自分が何をしてるのか理解してないから日本語もガタガタ。

チート板で聞くような用途でそんな精度いらないと思うけどね。
0592ネトゲ廃人@名無し
垢版 |
2023/06/29(木) 11:48:52.90ID:???
よく知らないけどその手の演算ライブラリのDLLをCEのプロセスにロードしてAPI叩くのでは?
0594ネトゲ廃人@名無し
垢版 |
2023/06/29(木) 15:49:10.58ID:???
有効数字は変わらんって言えばいいことをそこまでぐだぐだいう奴が”日本語がガタガタ”笑
0595ネトゲ廃人@名無し
垢版 |
2023/06/29(木) 16:49:21.90ID:???
ツリーはグループとか階層確認だけっぽいけどな
一番裏側の部品から順番に最前面へ持ってけば希望通りに並ぶと思うぞ
あとはフォーム情報のファイル直接いじればZオーダー書いてあるんじゃねーか?
0596ネトゲ廃人@名無し
垢版 |
2023/06/29(木) 17:27:52.94ID:n3XgK3mH
コーディングや計算の段階で誤差が出ると思う奴に"二進数の浮動小数点を使うなら有効桁は変わらないよ"とだけ言って正しく伝わるならそうする。

>>588にそこまで理解力あるならとっくに脱初心者してるんだよなぁ…>>594は人に教えるのうまいでちゅね〜ありがとう〜
0597ネトゲ廃人@名無し
垢版 |
2023/06/29(木) 22:16:58.89ID:???
>>595
一応できたっぽいんですけど
bring to frontで後ろに来て
send to backで前に来る上、
即時反映はされず一旦エディットモードを終わらせないと反映されませんでした。
これって仕様なんですかね?
0599ネトゲ廃人@名無し
垢版 |
2023/06/30(金) 18:25:14.00ID:???
自分より出来ない奴を見下してマウント取るのに必死で草
リアルでも後輩社員にこんな感じで接してるんやろなぁ
0600ネトゲ廃人@名無し
垢版 |
2023/06/30(金) 21:57:45.04ID:???
言葉の定義にこだわってる感じ社会人というより情報学科の一年生とかだろ
そいつに限らず細かいこと気にしすぎなやつ多すぎ
チーターはチーターらしく結果をでっち上げることだけに専念すればいいのに
0601ネトゲ廃人@名無し
垢版 |
2023/07/01(土) 16:46:06.01ID:???
>>596
すいませんがそういうのはスレチです
ここはチート初心者スレなんで
そういうレスはコミュニケーション初心者スレとかでお願いします
0602ネトゲ廃人@名無し
垢版 |
2023/07/02(日) 13:18:20.12ID:b/OSoTcu
三國無双に似たオフラインゲームで
チートコードを作りたいんだけど知見がある方いれば教えて。。

やりたいことは外伝限定で操作出来るキャラを本編で操作したい。

この場合「誰を操作するか」という情報と
外伝キャラクターのidを特定する必要があると思うんだけど、どうやって特定すれば良いのか、そもそもこの考え方が合ってるのか分からなくて。 
因みにドラッグオンドラグーン3っていうPS3のゲーム
0603ネトゲ廃人@名無し
垢版 |
2023/07/05(水) 06:19:20.70ID:Ip85qtpE
仕事でC使ってるのにこのスレの内容全く分からん
0604ネトゲ廃人@名無し
垢版 |
2023/07/11(火) 01:30:38.33ID:N7G3fNL2
専ブラ停止で人がいるかわからんけども
公式の衣装のバイナリ見るのに適したバイナリエディタとかあったら教えてほしい
0606ネトゲ廃人@名無し
垢版 |
2023/07/13(木) 07:00:19.97ID:???
Cのような高級言語知ってるだけじゃわからんよ
機械語レベルの知識がないと
0608ネトゲ廃人@名無し
垢版 |
2023/07/13(木) 22:06:23.74ID:???
unityroomでセーブデータをいじりたいのですがよくわからないので教えてください
Chromeのコンソールを開いて実行コンテキストセレクタをwebgl-frameに設定
IndexedDBからセーブデータを取得するところまではいけました
しかし改ざんしたセーブデータをputしてもゲーム内に反映されません
これといったエラーも表示されないので手詰まりです
0609ネトゲ廃人@名無し
垢版 |
2023/07/14(金) 00:06:59.07ID:???
ネット越しに取得するデータだからデータ破損や改ざん防止でチェックサム的なデータを持ってるかハッシュ値みたいの別途取得して比較してるとか?
0611ネトゲ廃人@名無し
垢版 |
2023/07/15(土) 16:31:03.53ID:???
自己解決しました
セーブデータのサイズが変わったのにPlayerPrefsに記録されるデータ長を変更し忘れてたのが原因でした
0613ネトゲ廃人@名無し
垢版 |
2023/07/20(木) 18:48:14.79ID:Tgz99W6M
サイズの異なるファイルのバイナリを比較したいんだけど
ファイルAのX行からY行、ファイルBのZ行からW行を比較する
みたいなのができるバイナリエディタ知りませんか
0614ネトゲ廃人@名無し
垢版 |
2023/07/20(木) 21:14:37.02ID:???
比較したい範囲を2つのテキストファイルにコピペしてWinMergeで比較すれば楽かもね
0615ネトゲ廃人@名無し
垢版 |
2023/07/21(金) 00:55:20.33ID:M7XcGNJj
あぁそうか
冷静に考えれば誰でも思いつく方策を思いついてなかった
ありがとうございますやってみます
レスを投稿する


ニューススポーツなんでも実況