小编E-K*_*ami的帖子

如何使用GDB和QEMU调试Linux内核?

我是内核开发的新手,我想知道如何使用QEMU和gdb运行/调试linux内核.我实际上正在阅读Robert Love的书,但遗憾的是它无法帮助读者如何安装适当的工具来运行或调试内核......所以我所做的就是按照本教程http://opensourceforu.efytimes.com/2011/02/kernel-development-debugging-using-eclipse /.我正在使用eclipse作为IDE在内核上开发,但我想首先让它在QEMU/gdb下运行.所以我到目前为止所做的是:

1)用以下代码编译内核:

make defconfig (then setting the CONFIG_DEBUG_INFO=y in the .config)
make -j4
Run Code Online (Sandbox Code Playgroud)

2)编译完成后,我使用以下命令运行Qemu:

qemu-system-x86_64 -s -S /dev/zero -kernel /arch/x86/boot/bzImage
Run Code Online (Sandbox Code Playgroud)

它以"停止"状态启动内核

3)因此我必须使用gdb,我尝试以下命令:

gdb ./vmlinux
Run Code Online (Sandbox Code Playgroud)

正确运行但是...现在我不知道该怎么办...我知道我必须在端口1234(Qemu使用的默认端口)上使用远程调试,使用vmlinux作为符号表文件调试.

所以我的问题是:我应该怎样做才能在Qemu上运行内核,将调试器附加到它上面,从而使它们协同工作,使内核开发更轻松.

linux gdb qemu linux-kernel

33
推荐指数
2
解决办法
4万
查看次数

gcc编译"无法计算目标文件的后缀:无法编译"

我实际上正在阅读LFS书籍(版本7.1),我在第53页被阻止.尝试编译gcc,我尝试了以下命令:

./configure --target=$LFS_TGT --prefix=$LFS/build/gcc-build --disable-nls\
--disable-shared --disable-multilib --disable-decimal-float --disable-threads\
--disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath\
--disable-target-libiberty --disable-target-zlib\
--enable-languages=c\
--without-ppl --without-cloog\
--with-mpfr-include=$LFS/source/mpfr/src
--with-mpfr-lib=$LFS/source/mpfr/src/.libs\
--with-gmp-include=/mnt/LFS/source/gmp\
--with-gmp-lib=/mnt/LFS/source/gmp/.libs\
--with-mpc-include=/mnt/LFS/source/mpc/src\
--with-mpc-lib=/mnt/LFS/source/mpc/src/.libs
Run Code Online (Sandbox Code Playgroud)

运行gcc的配置脚本(当然我已经编译了mpfr,mpc和gmp).但是一旦我发布:

make -j4
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

checking for suffix of object files... configure: error: in `/mnt/LFS/source/gcc-4.6.2/x86_64-lfs-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[1]: *** [configure-target-libgcc] Error 1
Run Code Online (Sandbox Code Playgroud)

我试图谷歌为它,并尝试了我找到的解决方案但没有任何效果.有谁知道我为什么会收到这个错误?

linux compiler-construction gcc linux-from-scratch

25
推荐指数
3
解决办法
3万
查看次数

获取Observable的最新值并立即发出

我正在尝试获取给定的最新值,Observable并在调用后立即将其发出.以下面的代码为例:

return Observable.just(myObservable.last())
    .flatMap(myObservable1 -> {
        return myObservable1;
    })
    .map(o -> o.x) // Here I want to end up with a T object instead of Observable<T> object
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为通过这样做,flatMap将发射myObservable1,然后必须发射,以达到map.我不知道是否可以做这样的事情.有没有人知道如何实现这一目标?谢谢

java reactive-programming rx-java rx-android

14
推荐指数
1
解决办法
4万
查看次数

Gradle:强制使用存储库作为依赖项

我想知道是否有办法强制gradle将存储库用于一个依赖项.例如:

buildscript {
repositories {
    jcenter()
    mavenCentral()
    maven { url 'https://www.testfairy.com/maven' }
    maven { url 'https://maven.fabric.io/repo' }
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}

dependencies {
    classpath 'com.android.tools.build:gradle:1.0.1'
    classpath "io.fabric.tools:gradle:1.+"
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
wearApp project(':wear')
compile project(':shimmer')
compile('com.twitter.sdk.android:twitter:1.1.1@aar') {
    transitive = true;
}
compile('com.twitter.sdk.android:tweet-composer:0.7.2@aar') {
    transitive = true;
}
compile 'com.android.support:appcompat-v7:21.0.3'
// Dagger 2 dependencies
compile 'com.google.dagger:dagger:2.0-SNAPSHOT'
apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT'
provided 'org.glassfish:javax.annotation:10.0-b28'

}
Run Code Online (Sandbox Code Playgroud)

我想要com.google.dagger签出,https://oss.sonatype.org/content/repositories/snapshots因为现在它试图检查出来的https://maven.fabric.io/repo结果是以下错误:

Error:Could not GET 'https://maven.fabric.io/repo/com/google/dagger/ …
Run Code Online (Sandbox Code Playgroud)

android gradle dagger-2

11
推荐指数
2
解决办法
7406
查看次数

以编程方式捕获网络流量(无根)

我正在尝试查找资源或库,这些资源或库可以允许我以编程方式捕获设备的所有网络数据包的流量,无论是来自wifi还是移动网络.我相信不需要root权限才能在这个混杂模式的鲨鱼根本就请求,因为有这个程序在Play商店中,可以捕获所有网络流量(甚至解密用MITM SSL),而不需要root权限.我根本无法弄清楚如何做同样的事情.

我的问题是:这个应用程序是如何实现此捕获的?他们使用了什么API?

谢谢您的帮助.

android network-programming packet-sniffers android-networking

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

Android构建工具1.1.0,单元测试文件夹?

我最近安装了从谷歌到我的android项目的最新工具:

buildscript {
      repositories {
         jcenter()
         mavenCentral()
      }
      dependencies {
         classpath 'com.android.tools.build:gradle:1.1.0'
      }
}

allprojects {
    repositories {
        jcenter()
    }
}

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    defaultConfig {
        applicationId "com.xxx"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 200
        versionName "2.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    signingConfigs {
        debug {
            ...
        }
        release {
            ...
        }
    }
    buildTypes {
        release {
            ...
        }
        debug {
            ...
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', …
Run Code Online (Sandbox Code Playgroud)

android build-tools android-build robolectric android-gradle-plugin

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

Android应用程序类生命周期文档

我正在尝试查找有关Android Application类生命周期的官方文档.显然,对于我在计算器上发现这里这里应用类可如果系统需要内存杀害.甚至教程也是如此.

但很少有事情让我有点恼火:

  • 我找不到官方文件告诉我是的,这个Application课程可以在低内存中被杀死.
  • 我找不到任何代表Application生命周期的官方图表.
  • Application除了之外,我找不到任何适当的回调来使用onLowMemory().这是否意味着我必须使用此方法来保存我的数据?
  • 如果Application该类在低内存压力下被杀死并且应用程序再次出现在前台,我怎么能知道onCreate()应用程序在系统终止后被重新创建?在一个Activity我会测试savedInstanceState,但据我所知,在Application课堂上没有类似的东西.

谢谢你的启发.

android android-lifecycle

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

获得精灵部分抵消

我正在尝试获取elf文件的每个部分的偏移量和数据.我已经使用此代码的部分名称:

#include <elf.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>

int filesize(int fd)
{
  return (lseek(fd, 0, SEEK_END));
}

void    print_section(Elf64_Shdr *shdr, char *strTab, int shNum)
{
  int   i;

  for(i = 0; i < shNum; i++)
     printf("%02d: %s\n", i, &strTab[shdr[i].sh_name]);
}

int main(int ac, char **av)
{
  void  *data;
  Elf64_Ehdr    *elf;
  Elf64_Shdr    *shdr;
  int       fd;
  char      *strtab;

  fd = open(av[1], O_RDONLY);
  data = mmap(NULL, filesize(fd), PROT_READ, MAP_SHARED, fd, 0);
  elf = (Elf64_Ehdr *) data;
  shdr = (Elf64_Shdr *) (data …
Run Code Online (Sandbox Code Playgroud)

c unix elf

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

如何测试电子邮件确认?

我正在尝试使用 django-rest-auth 测试电子邮件确认视图。这是我所拥有的:

def test_verify_email(self):
    # Verify email address
    username = 'userTest'
    payload = {
        'email': 'test@example.com',
        'password1': 'TestpassUltra1',
        'password2': 'TestpassUltra1',
        'username': username,
    }
    res = self.client.post(REGISTER_USER_URL, payload)

    self.assertEqual(res.status_code, status.HTTP_201_CREATED)
    user = get_user_model().objects.get(email='test@example.com')
    # TODO retrieve the confirmation key from the user
    resp = self.client.post(VERIFY_USER_URL, {'key': ''})
    self.assertEqual(resp.status_code, status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)

self.client.post(REGISTER_USER_URL, payload)将发送一封包含确认代码的电子邮件,虽然我知道我可以django.core.mail.outbox在代码中检索该代码,但我宁愿不这样做,因为我必须解析电子邮件内容以查找确认代码(如果电子邮件更改)。我找不到存储在数据库中任何位置的代码,它似乎确实只存在于发送的电子邮件正文中。

我的问题是:在我的测试中是否可以在不解析电子邮件的情况下恢复此验证码?我只是想找回它来启动我self.client.post(VERIFY_USER_URL, {'key': ''})的。

以下是电子邮件内容的示例:

Hello from example.com!

You're receiving this e-mail from NomadSpeed because user detro1 has given yours as an e-mail address to …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework django-allauth django-rest-auth

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