小编Gad*_*ion的帖子

解码和理解汇编代码

所以有点背景.我是c和汇编代码的初学者,我们有一个"炸弹"赋值(用c编写)调用需要某些密码的方法,但代码不可见,我需要通过查看汇编代码来确定正确的密码.

代码表明此方法的密码是6个数字,它作为"输入"传递给方法阶段2(我试图避免触发).

我感到困惑的部分是从+64跳到+42.它似乎是一个循环,但我不确定每次传递如何影响堆栈.如果最后两个数字是相同的,它看起来像循环退出,并且它与添加和减去4有关,但我不确定如何遍历地址.如果任何人都可以翻译正在发生的事情,或者如果我需要查看任何特定的寄存器/位置,那将会有很大帮助.还有4个阶段,每个阶段都应该更复杂,所以我希望能够很好地理解如何阅读这些阶段.

此外,如果任何人有一个良好的资源(如可打印表)与汇编代码关键字也会有所帮助,如果32位和64位寄存器之间有任何差异,我需要担心除寄存器名称之外. .

    82          phase_2(input);
(gdb) disas phase_2
Dump of assembler code for function phase_2:
0x000000000040106b <phase_2+0>: push   %rbp
0x000000000040106c <phase_2+1>: push   %rbx
0x000000000040106d <phase_2+2>: sub    $0x28,%rsp
0x0000000000401071 <phase_2+6>: mov    %rsp,%rsi
0x0000000000401074 <phase_2+9>: callq  0x401457 <read_six_numbers>
0x0000000000401079 <phase_2+14>:        cmpl   $0x0,(%rsp)
0x000000000040107d <phase_2+18>:        jne    0x401086     <phase_2+27>
0x000000000040107f <phase_2+20>:        cmpl   $0x1,0x4(%rsp)
0x0000000000401084 <phase_2+25>:        je     0x40108b <phase_2+32>
0x0000000000401086 <phase_2+27>:        callq  0x401421 <explode_bomb>
0x000000000040108b <phase_2+32>:        lea    0x8(%rsp),%rbx
0x0000000000401090 <phase_2+37>:        lea    0x18(%rsp),%rbp
0x0000000000401095 <phase_2+42>:        mov    -0x8(%rbx),%eax
0x0000000000401098 <phase_2+45>:        add    -0x4(%rbx),%eax
0x000000000040109b <phase_2+48>:        cmp …
Run Code Online (Sandbox Code Playgroud)

c gdb assemblies

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

使用GROUP BY的标准偏差的SQL查询?

我在标准偏差函数方面遇到了一些问题(具体来说是MonetDB中的stddev_samp).我尝试了以下查询但没有成功:

    select industry, avg(marketcap) as industryavg, stddev_samp(marketcap) as industrysd from cumulativeview group by industry
    select  stddev_samp(marketcap) as industrysd from cumulativeview group by industry
Run Code Online (Sandbox Code Playgroud)

每个都给了我一个非常奇怪的例外,似乎stddev函数不能按子集对组进行操作,但是单独使用avg函数似乎在子集上工作得很好,如下面的查询:

    select industry, avg(marketcap) as industryavg  from cumulativeview group by industry
Run Code Online (Sandbox Code Playgroud)

当我使用where子句而不是group by时,标准偏差函数工作得很好:

    select  stddev_samp(marketcap) as industrysd from cumulativeview where industry='Diversified Investments'
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法来编写一个查询,它可以同时为每个行业提供平均值和标准差,而不必为每个行业编写单独的查询?我很困惑为什么普通函数与group by和stddev不兼容...

sql group-by function monetdb

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

理解/解码晦涩的汇编代码

就像我之前的问题一样,这涉及到一个分配,其中调用一个需要特定密码的方法,代码是隐藏的,我们必须从汇编代码中推断密码(我想避免点击 。我已经完成了几个阶段,所以到目前为止,我的理解越来越好,但是这个阶段有几个方面我遇到了麻烦。到目前为止,我知道这个阶段的密码是两个整数。回溯一直是我对其中一些方法的转到方法,但不是很有效对这个阶段有帮助。

  1. 我了解 cltq 将 eax(rax) 扩展为 4 个字,但我不确定这如何影响计算,也不确定如果多次点击该行会发生什么。
  2. Phase5+82 -> Phase5+65(循环?)我尝试从什么值开始,以便 ecx(rcx) 可以通过最终比较?
  3. mov 0x402600(,%rax,4),%eax <- 这一行到底做了什么?空白让我很困惑,空白= 0吗?
  4. 任何其他帮助理解正在发生的事情以及我应该如何解决输入问题都会有所帮助,我尝试将其转换回 C 代码,就像之前的阶段一样

    0x00000000004010b4 <phase_5+0>:         sub    $0x18,%rsp
    0x00000000004010b8 <phase_5+4>:         lea    0x10(%rsp),%rcx
    0x00000000004010bd <phase_5+9>:         lea    0x14(%rsp),%rdx
    0x00000000004010c2 <phase_5+14>:        mov    $0x4026aa,%esi
    0x00000000004010c7 <phase_5+19>:        mov    $0x0,%eax
    0x00000000004010cc <phase_5+24>:        callq  0x400b80<sscanf@plt>
    0x00000000004010d1 <phase_5+29>:        cmp    $0x1,%eax
    0x00000000004010d4 <phase_5+32>:        jg     0x4010db<phase_5+39>
    0x00000000004010d6 <phase_5+34>:        callq  0x401421(explode_bomb)
    0x00000000004010db <phase_5+39>:        mov    0x14(%rsp),%eax
    0x00000000004010df <phase_5+43>:        and    $0xf,%eax
    0x00000000004010e2 <phase_5+46>:        mov    %eax,0x14(%rsp)
    0x00000000004010e6 <phase_5+50>:        cmp    $0xf,%eax
    0x00000000004010e9 <phase_5+53>:        je     0x40111b <phase_5+103>
    0x00000000004010eb …
    Run Code Online (Sandbox Code Playgroud)

c assembly cracking

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

读取/解析文本文件输入 C++

一点背景:我正在为一个学校项目开发一个滑块拼图,这是我们第一次使用 C++ 而不是 Java。这是我第一次必须实现从文件中读取数据的东西。

我有一个关于从文本文件读取输入的简单问题。我了解如何逐行读取文件并将每一行保存在一个字符串中,我想知道是否可以在读取文件时将字符串解析为不同的数据类型。

目前我正在阅读每一行并将它们作为字符串存储在向量中以供稍后解析,我知道必须有一种更简单的方法来实现这一点

第一行包含 2 个整数,表示网格的长度和宽度,接下来的行将包含 4 个整数和一个字符,用作创建块时的参数。

我的问题是,如果我一个字符一个字符地读取文件,是否有一个我可以使用的函数来检测字符是整数还是字符(并忽略空格),以便我可以立即存储它们并创建块读取文件时的对象?在这种情况下,我将如何处理大于 10 的整数?

编辑:只是注意到我使用 fstream 来读取文件,我不熟悉其他输入法

示例输入:

4  4
3  1  2  1  b
1  1  1  1  a 
Run Code Online (Sandbox Code Playgroud)

c++ input

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

UDP传输和维护网络字节顺序

所以我在通过C++中的客户端 - 服务器程序发送和接收自定义数据包时遇到了一些麻烦.我已经使用TCP实现了类似的功能,但是在使用UDP时,我遇到了将所有内容转换为单个数据报的问题.

目前我的头部由偶数个uint32_t字段组成.其中每个都以网络顺序存储,如下所示:

 uint32_t x = htonl (int y);
Run Code Online (Sandbox Code Playgroud)

...

我正在将报头与数据包中的有效负载结合起来,如下所示:

 typedef struct {
    450Header header; // 512 bytes consisting of the unint32_t like above
    char data[ BLOCKSIZE ];  // 3.5k
    // Total Packet Size = 4k
} Packet;
Run Code Online (Sandbox Code Playgroud)

"

标题部分将包含有关数据包的信息,我的问题是如何处理字符串和有效负载的字节顺序.我非常喜欢一些字符串字段添加到搞什么名头,如果我派比数据包中的块大小,我想它分成多个包大的文件,我需要知道如何分割文件,因此可以按正确的顺序解释接收端.

  1. 我已经成功地独立构建了一个标题(所有字段都按网络字节顺序排列),如果我将它们添加到标题中,是否还需要转换字符串的顺序?我假设如果我将字符串保持在设定的大小,我仍然可以为标题编写校验和函数.

  2. 如果从问题1中正确排序所有内容,我是否需要在接收端再次将它们转换回主机订单?

  3. 我有一个mmap函数,它将文件加载到char缓冲区中,我可以简单地使用memcpy和递增偏移量这样一块一块地复制到Packet中的数据缓冲区吗?或者我是否还要担心有效载荷数据的网络顺序?

  4. 我是否需要对有效负载使用校验和?如果它不使用整个缓冲区并以奇数个字节结束,我该怎么办呢?

最后,我想报头包含序列号,所以我可以练习执行程序,如果数据包被丢弃(即回N),所以我现在最担心的是规范中,一切都从客户端发送的,因此它可以被理解的顺序在服务器端以正确的顺序.

c++ sockets networking udp

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

标签 统计

c ×2

c++ ×2

assemblies ×1

assembly ×1

cracking ×1

function ×1

gdb ×1

group-by ×1

input ×1

monetdb ×1

networking ×1

sockets ×1

sql ×1

udp ×1