V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mingl0280
V2EX  ›  C++

今天在公司代码里见识了一个骚操作

  •  
  •   mingl0280 ·
    mingl0280 · 2020-07-23 05:58:35 +08:00 · 7550 次点击
    这是一个创建于 1592 天前的主题,其中的信息可能已经有所发展或是发生改变。
    函数返回是个指针,并且后面预期这个指针要删的,下面是函数的返回代码:
    return (PUCHAR)(0x00001000);
    //( typedef PUCHAR unsigned char* )
    太骚了...真的太骚了...
    22 条回复    2020-09-02 15:56:24 +08:00
    blackdesk
        1
    blackdesk  
       2020-07-23 06:11:47 +08:00 via Android
    这稀奇在什么地方呢
    x1596357
        2
    x1596357  
       2020-07-23 07:06:32 +08:00 via iPhone
    不稀奇,这么低的地址,感觉是硬件初始化的东西。
    leimao
        3
    leimao  
       2020-07-23 07:27:31 +08:00 via iPhone
    反正不是 best practice,没事不要这么写
    mingl0280
        4
    mingl0280  
    OP
       2020-07-23 07:39:57 +08:00
    @x1596357 并不是硬件初始化,软件是运行在 Linux 上的,稍微做了一下跨平台而已.后面用完这个东西的时候,这行会导致意外地遇到 delete 0x1000 这种神奇的玩意儿.
    nightv2
        5
    nightv2  
       2020-07-23 07:46:03 +08:00 via Android
    这指针就不能删除吧
    gowk
        6
    gowk  
       2020-07-23 07:55:13 +08:00 via Android   ❤️ 8
    看成:今天在公司看见一个骚货…
    vk42
        7
    vk42  
       2020-07-23 08:14:40 +08:00
    看不出来骚在哪,也没有足够上下文。一般说骚操作应该也有巧妙的含义吧
    lechain
        8
    lechain  
       2020-07-23 08:16:44 +08:00 via Android
    这就骚操作了?那嵌入式 c 代码 shi 山里面绝对还有一大堆你没见过的“骚操作”(逃
    zjsxwc
        9
    zjsxwc  
       2020-07-23 08:27:59 +08:00
    Windows 的 c++吗, 0x00001000 有什么意义?
    zjsxwc
        10
    zjsxwc  
       2020-07-23 08:31:47 +08:00
    @zjsxwc http://blog.sina.com.cn/s/blog_55215b6f0100m1ae.html

    在 WIN32 中,每个应用程序都可“看见”4GB 的线性地址空间,其中最开始的 4MB 和最后的 2GB 由操作系统保留,剩下不足 2GB 的空间用于应用程序私有空间。具体分配如下:0xFFFFFFFF-0xC0000000 的 1GB 用于 VxD 、存储器管理和文件系统; 0xBFFFFFFF-0x80000000 的 1GB 用于共享的 WIN32 DLL 、存储器映射文件和共享存储区; 0x7FFFFFFF-0x00400000 为每个进程的 WIN32 专用地址; 0x003FFFFF-0x00001000 为 MS-DOS 和 WIN16 应用程序; 0x00000FFF-0x00000000 为防止使用空指针的 4,096 字节。以上都是指逻辑地址,也就是虚拟内存。
    zjsxwc
        11
    zjsxwc  
       2020-07-23 08:33:27 +08:00
    所以楼主维护的是一个 DOS 程序?逃
    widewing
        12
    widewing  
       2020-07-23 08:42:01 +08:00 via Android
    所以返回一个常数是什么意思?还没实现的函数?
    idealhs
        13
    idealhs  
       2020-07-23 09:17:22 +08:00
    所有现代操作系统下应用程序都操作的是自身被分配的逻辑地址吧,这个影响不到别的软件或者系统的。
    wangritian
        14
    wangritian  
       2020-07-23 09:59:24 +08:00
    这个地址上的内容是什么?可以确定每次编译后对应的内容一定放在那个地址?
    xyzzzz
        15
    xyzzzz  
       2020-07-23 10:15:53 +08:00   ❤️ 1
    可能通过链接脚本把某些东西放到了这个地址上哦?
    liuminghao233
        16
    liuminghao233  
       2020-07-23 12:23:09 +08:00 via iPhone
    看不出哪里骚
    只看到了屎山的脚
    LANB0
        17
    LANB0  
       2020-07-23 14:12:13 +08:00
    @lechain 做嵌入式的表示不背这锅,位操作、拿着指针可劲儿偏移访问各种数组结构体、来自内核的 offsetof 等等都是精巧设计。楼主这个算什么?除了从特定地址写 flash 这种特殊场景,根本就不可能这么玩儿
    lechain
        18
    lechain  
       2020-07-23 21:43:01 +08:00 via Android
    @LANB0 不好意思对你造成误会了,我说的不是嵌入式精巧的地方,是“shi 山”😂
    mingl0280
        19
    mingl0280  
    OP
       2020-07-23 22:27:18 +08:00
    @zjsxwc
    @wangritian
    @xyzzzz 都不是,就是屎代码(这个人离职之前搞出了一大堆狗屎代码,全组都在慢慢给丫的收拾烂摊子)
    mingl0280
        20
    mingl0280  
    OP
       2020-07-23 22:28:23 +08:00
    @LANB0 最离谱的是,这根本不是嵌入式代码,嵌入式的代码在另外一个分支上,那个分支除了我们几个看得懂 C51 和 Keil 的没人敢碰,所以代码质量比这个玩意儿高一大截...
    rohgeo
        21
    rohgeo  
       2020-07-24 13:18:24 +08:00
    返回一个固定的地址?。。。
    sl0000
        22
    sl0000  
       2020-09-02 15:56:24 +08:00
    这种一般都出段错误
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2824 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:23 · PVG 20:23 · LAX 04:23 · JFK 07:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.