Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[x64対応] (未着手) 0x7fffffff を超えるポインタのエミュレート #91

Closed
kobake opened this issue Jun 11, 2018 · 4 comments
Labels
x64 x64 対応

Comments

@kobake
Copy link
Member

kobake commented Jun 11, 2018

何かしらの方法でメモリ確保時のポインタが 0x7fffffff を超えるような状況を作り出して動作を確かめたい。

※この Issue 対応は kobake がやるとは限らないです。誰か着手する人がいましたら、この Issue のタイトルを (着手済) に変更してください。

@kobake kobake added the x64 x64 対応 label Jun 11, 2018
@m-tmatma
Copy link
Member

#include "stdafx.h"
#include <stdlib.h>

int main()
{
	char * p = (char*)malloc(10);
	printf("p = %p\n", p);
	free(p);
	return 0;
}

のようなコードで、

p = 00000224422A5900

という出力になりました。

個別に確認するのは時間がかかりそう。

@kobake
Copy link
Member Author

kobake commented Jun 11, 2018

こちらの手元でも確認しましたが、普通に 0x7fffffff を超える値返ってきますね。
動作確認はともかく大きなポインタ値の取得には苦労しなそう。

@berryzplus
Copy link
Contributor

berryzplus commented Jun 11, 2018

「大きい」の意味が unsigined long long の値が大きいの意味であれば、VirtualAllocExで開始アドレスを指定すればいけるような気がします。やってる時間がとれなさそうなので、参考資料になりそうなもの探してみました。

大容量メモリの扱いに関する資料
http://www.atmarkit.co.jp/ait/articles/1006/03/news093_2.html

x64のメモリマップに関する資料
https://qiita.com/kimuraya/items/1c9023d2bc27ecaed259

@berryzplus
Copy link
Contributor

これ、閉じておきますね。(経緯は #1394 参照)

たぶん、0x7fffffff を超えるポインタ という表現は、次のような大前提から来てるように思います。

  • ポインタとは、メモリアドレスを表す数値である。
  • 数値なんだから当然、int型にキャストできる。
  • intの最大値は 0x7fffffff までだから、キャストして使ってたら大変だ。

実際数値なので、ポインタを数値として扱うこと自体は間違いじゃないっす。
でも「当然、int型にキャストできる」ってのは間違いだと思います。
ポインタの指す値が int型に収まるならint型にキャストしてもいいよ ってだけだと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
x64 x64 対応
Projects
None yet
Development

No branches or pull requests

3 participants