小编Hud*_*den的帖子

为什么数组不能作为函数参数传递?

为什么不能将数组作为函数参数传递?

我一直在阅读这本C++书,上面写着"你不能将数组作为函数参数传递",但它从未解释过为什么.此外,当我在网上查找时,我发现了一些评论,比如'你为什么要这样做?' 这不是我会这样做的,我只是想知道为什么你不能这样做.

c++ arrays pointers pass-by-reference

34
推荐指数
3
解决办法
9124
查看次数

使用UEFI编写操作系统

由于上学原因,我最近没有编码,但我决定再次开始从事OS开发工作.最近我听说EFI作为BIOS的替代品.我想为使用EFI而不是BIOS的平台开发操作系统.我无法确定从哪里开始.谁能指出我正确的方向?也许解释一下EFI对OS开发的意义,也许可以告诉我可以使用哪些测试环境(最好是虚拟的).坦率地说,我真的不确定EFI到底是什么.我也应该花时间研究ARM组装吗?我知道x86汇编,但我觉得这也已经过时了.我真的迷路了,我很想听听你的意见.

谢谢

assembly cpu-architecture osdev efi uefi

18
推荐指数
2
解决办法
8473
查看次数

x86_64汇编Linux系统调用混淆

我目前正在学习Linux上的汇编语言.我一直在使用"从头开始编程"一书,所有的例子都是32位的.我的操作系统是64位,我一直在尝试以64位的方式完成所有示例.我遇到了麻烦:

.section .data

.section .text
.global _start
_start:
movq $60, %rax
movq $2, %rbx
int $0x80
Run Code Online (Sandbox Code Playgroud)

这只是调用Linux退出系统调用或它应该.相反,它会导致SEG FAULT,而当我改为执行此操作时

.section .data

.section .text
.global _start
_start:
movq $1, %rax
movq $2, %rbx
int $0x80
Run Code Online (Sandbox Code Playgroud)

有用.显然,问题是我转向%rax的价值.我在第二个例子中使用的$ 1值是"从头开始编程"所说的,但互联网上有多个来源说64位系统呼叫号码是60美元.参考 我做错了什么?还应该注意哪些其他问题以及我应该使用什么作为参考?万一你需要知道,我在第5章"从头开始编程".

64-bit assembly 32-bit gnu-assembler system-calls

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

为什么在这种情况下需要指针?

可能重复:
学习C++:多态和切片

这是我之前提出的一个问题.这些类看起来像这样:

class Enemy
{
    public:
        void sayHere()
        {
            cout<<"Here"<<endl;
        }
        virtual void attack()
        {
        }
};

class Monster: public Enemy
{

    public:
        void attack()
        {
            cout<<"RAWR"<<endl;
        }

};
class Ninja: public Enemy
{

    public:
        void attack()
        {

            cout<<"Hiya!"<<endl;
        }
};
Run Code Online (Sandbox Code Playgroud)

我是C++的新手,我很困惑为什么这只能用指针(忍者和怪物都来自敌人):

int main()
{
    Ninja ninja;
    Monster monster;

    Enemy *enemies[2];

    enemies[0] = &monster;
    enemies[1] = &ninja;

    for (int i = 0; i < 2; i++)
    {
        enemies[i]->attack();
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做呢?:

int main()
{
    Ninja ninja;
    Monster …
Run Code Online (Sandbox Code Playgroud)

c++ arrays polymorphism pointers

15
推荐指数
2
解决办法
1317
查看次数

C++:如何将引用函数传递给另一个函数?

我一直在阅读函数指针以及将它们用作其他函数的参数.我的问题是如何在不使用指针的情况下通过引用传递函数?我一直试图在互联网上找到答案,但我没有找到一个好的答案.我知道您可以通过引用传递变量,如下所示: void funct(int& anInt);.你会如何做与此类似的事情,但是对一个变量的引用而不是对函数的引用是参数?另外,如何在函数体中使用函数的引用?

c++ function pass-by-reference argument-passing

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

如何将C对象文件与汇编语言对象文件链接?

我无法链接2个目标文件,其中一个是从汇编语言源文件生成的,另一个是从C源文件生成的.

C源代码:

//main2.c
extern int strlength(char *);
int main(){
    char * test = "hello";
    int num = strlength(test);
    return num;
}
Run Code Online (Sandbox Code Playgroud)

汇编源代码:

#strlength.s
.include "Linux32.s"

.section .text
.globl strlength
.type strlength, @function
strlength:
 pushl %ebp
 movl %esp, %ebp
 movl $0, %ecx
 movl 8(%ebp), %edx
read_next_byte:
 movb (%edx), %al
 cmpb $END_OF_FILE, %al
 jle end
 incl %edx
 incl %ecx
 jmp read_next_byte
end:
 movl %ecx, %eax
 popl %ebp
 ret
Run Code Online (Sandbox Code Playgroud)

当我使用'gcc'编译和运行时,如下所示:

gcc main2.c strlength.s -m32 -o test
./test
echo $?
Run Code Online (Sandbox Code Playgroud)

我得到5这是正确的.但是,当我单独编译/汇编然后链接'ld'时,如下所示:

as strlength.s --32 …
Run Code Online (Sandbox Code Playgroud)

c linux assembly gnu-assembler ld

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

C编程TCP校验和

我几天来一直无法为TCP做校验和.我在互联网上查看了很多来源,但我见过的所有示例都没有向您展示如何进行TCP校验和.我也查看了RFC文档,但仍遇到问题:

下面是我用来生成校验和的代码:

unsigned short checksum(unsigned short * buffer, int bytes)
{
    unsigned long sum = 0;
    unsigned short answer = 0;
    int i = bytes;
    while(i>0)
    {
            sum+=*buffer;
            buffer+=1;
            i-=2;
    }
    sum = (sum >> 16) + (sum & htonl(0x0000ffff));
    sum += (sum >> 16);
    return ~sum;
}
Run Code Online (Sandbox Code Playgroud)

此功能适用于IP校验和.

下面是我为TCP标头制作的结构:

struct tcp_header
{
    unsigned short tcp_sprt;
    unsigned short tcp_dprt;
    unsigned int tcp_seq;
    unsigned int tcp_ack;
    unsigned char tcp_res:4;
    unsigned char tcp_off:4;
    unsigned char tcp_flags;
    unsigned short tcp_win;
    unsigned …
Run Code Online (Sandbox Code Playgroud)

c checksum tcp raw-sockets

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

Django 自动为现有数据库表创建主键

我有一个现有的数据库,我试图用 Django 访问它。我曾经python manage.py inspectdb为数据库创建模型。目前我能够将模型导入 python shell 但是当我尝试以任何方式访问任何实际对象时,我收到此错误OperationalError: (1054, "Unknown column 'some_table.id' in 'field list'")。我看到数据库中的表实际上没有id字段。我怎样才能解决这个问题?我是否需要更新Meta类中的托管字段并运行迁移以便它可以自动创建此字段?

python mysql django legacy-database

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

对CMPSB指令感到困惑

我一直在看这个代码,我对rep cmpsb线感到困惑.

.LOOP:
      push    cx
      mov     cx, 0x000B                            ; eleven character name
      mov     si, ImageName                         ; image name to find
      push    di
 rep  cmpsb                                         ; test for entry match
      pop     di
      je      LOAD_FAT
      pop     cx
      add     di, 0x0020                            ; queue next directory entry
      loop    .LOOP
      jmp     FAILURE
Run Code Online (Sandbox Code Playgroud)

我明白它会重复cmpsb cx次,但是如何比较这两个字符串呢?比如说比较"Hey\0"和"hey\0",这个循环比较4个字符串.第一个字符是不同的,因此将设置EFlags寄存器.但是,重复cmpsb指令,下一个字符将是相同的.我可能误解了cmpsb是如何工作的,但看起来这个循环没有正确地比较两个字符串.这个循环实际上有效吗?

assembly nasm 16-bit osdev bootloader

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

在C中'''做什么?

可能重复:
'unsigned temp:3'表示什么

我一直在尝试用C学习原始套接字编程,并且遇到过这样的问题:

unsigned char      iph_ihl:5, iph_ver:4;
Run Code Online (Sandbox Code Playgroud)

我对':'的含义感到困惑.它甚至做了什么吗?或者它只是变量名称的一部分?

c sockets syntax

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