小编mas*_*wok的帖子

帮助理解GDB中一个非常基本的main()反汇编

Heyo,

我已经编写了这个非常基本的主要功能来试验反汇编,还可以看到并希望了解更低层次的情况:

int main() {
  return 6;
}
Run Code Online (Sandbox Code Playgroud)

使用gdb来disas main产生这个:

0x08048374 <main+0>:    lea    0x4(%esp),%ecx
0x08048378 <main+4>:    and    $0xfffffff0,%esp
0x0804837b <main+7>:    pushl  -0x4(%ecx)
0x0804837e <main+10>:   push   %ebp
0x0804837f <main+11>:   mov    %esp,%ebp
0x08048381 <main+13>:   push   %ecx
0x08048382 <main+14>:   mov    $0x6,%eax
0x08048387 <main+19>:   pop    %ecx
0x08048388 <main+20>:   pop    %ebp
0x08048389 <main+21>:   lea    -0x4(%ecx),%esp
0x0804838c <main+24>:   ret  
Run Code Online (Sandbox Code Playgroud)

这是我最好的猜测,我认为正在发生什么以及我需要逐行帮助:

lea 0x4(%esp),%ecx

将esp + 4的地址加载到ecx中.为什么我们为esp添加4?

我在某处读到这是命令行参数的地址.但是当我这样做时,x/d $ecx我得到了argc的值.存储的实际命令行参数值在哪里?

and $0xfffffff0,%esp

对齐堆栈

pushl -0x4(%ecx)

将esp最初的地址推入堆栈.这样做的目的是什么?

push %ebp

将基指针推入堆栈

mov %esp,%ebp

将当前堆栈指针移动到基指针中

push %ecx …

linux x86 assembly gdb disassembly

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

npm node_modules没有正确嵌套?

使用npm时我遇到了意想不到的行为.例如,使用命令安装express时:

npm install express
Run Code Online (Sandbox Code Playgroud)

我希望在"node_modules"目录中创建一个名为"express"的文件夹,并且它的依赖项将安装在该文件夹中的"node_modules"子目录中.

我所看到的是正在创建"express"文件夹,但它的所有依赖项都被添加到我的项目文件夹中的根"node_modules"目录(与express相同的级别),而不是嵌套在"express"文件夹中.

为什么会这样?(使用npm v3.3.5)

npm

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

为什么安装一个npm软件包会删除许多其他软件包?

我在使用npm安装软件包时遇到困难。该软件包安装成功,但是,它删除了一堆其他软件包。

我无法在另一台机器上重现此内容。这是软件包安装的输出:

[masterwok@crunchbox Caster]$  npm install react-native-google-cast --save
npm notice created a lockfile as package-lock.json. You should commit this file.
+ react-native-google-cast@1.3.0
added 1 package and removed 638 packages in 7.967s
[masterwok@crunchbox Caster]$  
Run Code Online (Sandbox Code Playgroud)

如您所见,它完全破坏了我的应用程序依赖性。是什么原因造成的?如果我不得不猜测,我会说无法满足某些依赖关系,而这种依赖关系会逐步下降。我不知道哈

npm react-native

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

Kotlin-如何运行n个协程并等待前m个结果或超时?

我正在尝试编写一个将启动n个协程并等待第一个m完成的函数。如果m个协程在某个超时时间内无法完成,则所有协程/作业都将被取消。我的初始实现如下所示,但是我觉得可以改进。我最初的想法是使用父作业在其下运行所有​​其他作业,以便可以取消父作业并将其级联到剩余的子级。但是,这导致必须捕获TimeoutCancellationException。

我该如何编写一个函数来启动n个协程并等待直到第一个m协程完成,或等待超时才能完成m个协程?

private suspend fun queryAllHosts(
        queryFactories: List<(query: String, pageIndex: Int) -> String>
        , query: String
        , pageIndex: Int
        , maxSuccessfulHosts: Int
        , queryTimeout: Long
        , requestTimeout: Long
): ArrayList<QueryResult<ResultModel>> {
    val results = ArrayList<QueryResult<ResultModel>>()
    val rootJob = Job()

    try {
        withTimeout(queryTimeout, TimeUnit.MILLISECONDS) {
            queryFactories.map {
                async(parent = rootJob) {
                    val pagedResult = queryHost(
                            it
                            , query
                            , pageIndex
                            , requestTimeout
                    )

                    if (pagedResult.isSuccessful()) {
                        results.add(pagedResult)
                    }

                    if (results.size == maxSuccessfulHosts) {
                        rootJob.cancelAndJoin()
                        return@async
                    }
                }
            }.awaitAll()
        }
    } catch …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinx.coroutines

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

简单的C指针澄清

我刚开始使用C语言中的指针而且我只是简单地挂了一些东西.我想确保我理解正确.

说我有这样的事情:

int *buff;

从我读到的,

*buff refers to the value that buff is currently pointing to
&buff refers to the address

但我坚持的是:

"buff"是指什么?它是指内存中的&buff的位置,它指向值*buff的位置?

谢谢你!:3

-jtsan

c pointers

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

汇编函数整数局部变量

我正在努力学习基本装配.我用C编写了一个简单的程序来翻译成汇编:

void myFunc(int x, int y) {
    int z;
}

int main() {
    myFunc(20, 10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这就是我认为函数的正确翻译将是:

.text
.globl _start
.type myFunc, @function

myFunc:
    pushl %ebp        #Push old ebp register on to stack
    movl %esp, %ebp   #Move esp into ebp so we can reference vars
    sub $4, %esp      #Subtract 4 bytes from esp to make room for 'z' var
    movl $2, -4(%ebp) #Move value 2 into 'z'
    movl %ebp, %esp   #Restore esp
    popl %ebp         #Set ebp to 0? …
Run Code Online (Sandbox Code Playgroud)

linux x86 assembly

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

如何在asp.net Identity中使用指定的salt和密码生成哈希?

我目前正在使用新的ASP.NET Identity框架.

我必须实现一种检查用户是否希望更改其密码的密码的方法.我有一张包含退役哈希及其相应盐的表格.

我无法弄清楚如何使用特定的盐生成哈希,以便我可以将新密码与已退役的密码进行比较.我见过UserManager.PasswordHasher.HashPassword(密码),但是我没有看到指定salt的重载.

如何使用Identity散列密码并指定盐?

c# asp.net hash owin asp.net-identity

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