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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

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

Q&A

2回答

2651閲覧

64bit プログラムに対してWriteProcessMemoryを行う

Susanoo2442

総合スコア153

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

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

0グッド

0クリップ

投稿2016/11/21 15:09

質問です。

現在、32bitプログラムに対するWriteProcessmemoryは
行えております。
しかしながら64bitプログラムに対しては
WriteProcessMemoryが失敗してしまいます。

WriteProcessMemoryを64bitプログラムに対して行う手法を
教えて下さい。

ざっとで構いませんので
アドバイスや調べる為のキーワードなどを頂けたらと思います。

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

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

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

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

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

guest

回答2

0

WriteProcessMemoryを64bitプログラムに対して行う手法

WriteProcessMemory操作を発行する側も64bitプロセスとするのが最も単純かつ確実です。

投稿2016/11/21 15:20

yohhoy

総合スコア6191

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

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

0

64bitのプロセスには64bitのプロセスでアクセスし、32bitのプロセスには32bitのプロセスからアクセスしないとうまくいかないと思います。
ただ、C#などの.NETアプリだと32/64両対応のアプリが作成できるはず(AnyCPUを選択)なので、それでもだめなんでしょうか?

参照:64ビット対応のDLLインジェクション

投稿2016/11/22 08:14

PineMatsu

総合スコア3579

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

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

Susanoo2442

2016/11/23 00:12

回答ありがとうございます。 AnyCpuにしていたのですが WriteProcessMemoryで ターゲットの関数を 書き換える時に メモリアドレスを指定しないと ダメなんですが その時に、アドレスの型がintではなく longでしたので AnyCpuでは、書き換える事が 出来ませんでした。 しかし、仰られた通り 64bitで書き換えるメモリ領域を long型で指定して WriteProcessMemoryを 実行した所、無事書き換わりました。 しかしながら次は メモリアドレスは毎回変わるので デバッガの方でベースポインタと オフセットを特定する必要がありまして それぞれ特定はしたのですが それを、WriteProcessMemoryで どう、指定するのかが分からず 困っております。 宜しければそちらのやり方をご存知でしたら 教えて頂きたくございます。 よろしくお願い致します。
aglkjggg

2016/11/23 11:59

unsafe になりますがポインタ変数を使うことが出来ます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問