質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1021閲覧

C++の、LNK2001というエラー

Helper

総合スコア10

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/08/21 10:19

ウェブから引っ張ったプログラムなので、全体を写せないのですが、

C++

1 NTSTATUS status = NtQuerySystemInformation(static_cast<SYSTEM_INFORMATION_CLASS>(SystemExtendedHandleInformation), &probe_buffer, sizeof(probe_buffer), &buffer_length);

という部分で、

重大度レベル コード 説明 エラー    LNK2001 外部シンボル "NtQuerySystemInformation" は未解決です。

という風に出ています。よくわからないです・・・ orz
エラーが出ているファイルが、 <プロジェクト名>.objというファイルに出ていて、行数が1行目となっています・・・
一番上のコードはおそらくエラーが起きている場所です。

そして、

重大度レベル コード 説明 エラー    LNK1120 1件の未解決の外部参照

というエラーも出ています・・・
ビルドしたときに出てきています。
これは <プロジェクト名>.exe というファイルで出ています。

とにかく解決方法を教えてほしいです。お願いします。
全体を写さないとダメなどはやめてほしいです。
解決方法教えてください。お願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Helper

2019/08/21 10:42

ほんとですね・・・ 今回ので解決できたら これからはあんま使わないように します。ありがとうございます。
guest

回答3

0

でているエラーメッセージのとおり、そのキーワードの関数が見つからないというエラーです
ライブラリの指定が不足してないかをチェックしましょう

投稿2019/08/21 10:27

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Helper

2019/08/21 10:31

わかりました。 今回の場合はどのように ライブラリに指定すればよいでしょうか?
guest

0

ベストアンサー

公式ドキュメントによれば

[NtQuerySystemInformation may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.]

本関数は将来のWindowsでは、他の関数で代替されるか使用不能となりうる。
アプリケーションにおいては本トピックで述べられた代替関数を用いるべし。

...だそうです。

投稿2019/08/21 12:07

編集2019/08/21 12:10
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Helper

2019/08/21 12:11

なるほど・・・ 回答ありがとうございます。
guest

0

NtQuerySystemInformationでググったらここに,

This function has no associated import library. You must use the LoadLibrary and GetProcAddress functions to dynamically link to Ntdll.dll.

って書いてありましたが.

投稿2019/08/21 10:28

fana

総合スコア11656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Helper

2019/08/21 10:31

なるほどわからん・・・w
episteme

2019/08/21 10:54

なにがわからん? 「LoadLibraryとGetProcAddressを使え」と言うておるぞ。
Helper

2019/08/21 10:57

なるほど! ちょっと調べてみます!
episteme

2019/08/21 10:59

...中学英語だぞ
fana

2019/08/21 11:00

NtQuerySystemInformation()の実装はNtdll.dllで提供されているが,Ntdll.dllを利用するためのlib(improt library)は存在しないから,LoadLibrary()とGetProcessAddress()を駆使してどうにかしろ,という話.
Helper

2019/08/21 11:00

...w とりま英語だった時点で めんどくさくてなるほどわからんって言ったw これからはちゃんと読むようにします!
Helper

2019/08/21 11:05

fanaさん回答ありがとうございます! ntdll.dllファイル自体は、ダウンロードしないといけないのですか? それとも元からダウンロードされているのですか?
episteme

2019/08/21 11:08

ntdll.dll は Widows にハナっから入ってます。
Helper

2019/08/21 11:14

了解しました! 調べてみて、 https://resources.infosecinstitute.com/calling-ntdll-functions-directly/#gref このサイトから、 ```C++ int _tmain(int argc, _TCHAR* argv[]) { typedef NTSTATUS(__stdcall * NT_OPEN_FILE)(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG ShareAccess, IN ULONG OpenOptions); NT_OPEN_FILE NtOpenFileStruct; /* load the ntdll.dll */ PVOID Info; HMODULE hModule = LoadLibrary(_T("ntdll.dll")); NtOpenFileStruct = (NT_OPEN_FILE)GetProcAddress(hModule, "NtOpenFile"); if (NtOpenFileStruct == NULL) { printf("[-] Error: could not find the function NtOpenFile in library ntdll.dll.\n"); exit(-1); } printf("[*] NtOpenFile is located at 0x%08x in ntdll.dll.\n", (unsigned int)NtOpenFileStruct); getchar(); return 0; } ``` というプログラムを見つけて、 実行してみたのですが、やっぱりできません・・・ できれば実行できるコードなどを見つけたら 張ってくれませんか?サイトでも良いです。 お願いします。こういう時に全体のソースを 見せれなくて本当に申し訳ないです。
episteme

2019/08/21 11:17

「できません」とは如何なる意味か? コンパイルエラー? リンクエラー? 実行時エラー? 何が起こったかを述べよ
Helper

2019/08/21 11:25

LNK2001だからリンクエラーだと思います。 コンパイルしているときにエラーが出ました。 コンパイルする前はエラーの表示がなく、 コンパイルするとエラーが出ました。 訳が分からない・・・w 一応警告も出ています。 警告が大事だったら一覧をコピペします。
episteme

2019/08/21 11:33

NtQuerySystemInformation を解決したいのに、なぜに NtOpenFile なの?
Helper

2019/08/21 11:44

? ごめんなさい。 あんまりC++をやっていなくて、 よくわかりません・・・ 解決コードだけポイって貼るみたいな事できませんか?w
episteme

2019/08/21 11:49

エンジニアらしからぬ言動。
Helper

2019/08/21 11:52

ww もうプログラムの意味わからなくても とりま実行させたいみたいなw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問