これは純粋に宿題の質問です。なぜなら、あなたが実際にこれをやろうとしてはいけないことを私は知っているからです。しかし、私はこれを正しくしようとしてきました。コピーする場所の永続的な開始位置と、コピーするメモリのチャンクの正確なサイズがわかっているとします。つまり、ソースが0x28000から0x2C0000までのスタックであるとします。スタックは下に向かって大きくなるため、スタックの最上位(0x2C0000)へのポインターが与えられます。STACK_SIZEバイトを2番目のスタックにコピーします。2番目のスタックの最上部は0x30000です。基本的にこのようなもの:
Stack 1 Stack 2
/--+-------------------+-------------------+--/
| ABXLQPAOSRJ| |
/--+-------------------+-------------------+--/
0x280000 0x2C0000 0x300000
^ ^
| |
Top of stack 1 Top of Stack 2
memcpyを使用する必要がある場合は、0x28000から開始する必要がありますか?(memcpyがどちらの方向に読み取るかは完全にはわかりません。高いアドレスから低いアドレスへ、またはその逆)これは正しいでしょうか?
void* s = (void *)source_stack_bottom //where source_stack_bottom is 0x280000 in this case
void* d = (void *)dest_stack_bottom //which is 0x2C0000
memcpy(d, s, STACK_SIZE) //STACK_SIZE is just a variable with the stack size
なぜそれが機能しないのか考えられませんが、それでも、Cがメモリを割り当てる方法についてはまだかなり混乱しています...
編集::おっと、さまざまな混乱。修正されました。