精华内容
下载资源
问答
  • 程序入口

    千次阅读 2018-10-22 09:20:11
    程序入口 加载 linux可执行文件都是通过调用execve函数来调用加载器的. 加载器将可执行文件的代码和数据从磁盘拷贝到内存中, 然后通过第一条指令来查找程序运行的入口, 从而执行整个程序. 而将数据从磁盘复制到...

    程序的入口

    加载

    linux可执行文件都是通过调用execve函数来调用加载器的.

    加载器将可执行文件的代码和数据从磁盘拷贝到内存中, 然后通过第一条指令来查找程序运行的入口, 从而执行整个程序. 而将数据从磁盘复制到内存的过程就叫做加载.

    程序的入口

    通过从内核设置的第一条指令找到程序的入口, 一般gcc默认编译程序的入口是_libc_start_main这一个默认函数, 而默认函数的入口又是存放在段<_start>里面. _start函数调用系统启动函数, 它初始化环境, 调用用户层的main函数, 处理main函数的返回值, 最后将返回值返回给内核处理.

    一个简单的代码

    int main()
    { }
    

    执行

    gcc main.c
    

    在执行

    objdump a.out -d 
    # 如果适合看intel的汇编, 可加上 -M intel 即可
    

    在这里插入图片描述

    可以看到, call __libc_start_main调用此函数, 而它是在<_start> 段中 . 在<_start>断之前还有3个段.

    <_init>段程序会初始化调用ELF.init函数. 有兴趣可以去查一下ELF.

    如果想要自己来设置程序的入口的, 可以在gcc中添加禁用mian入口的命令

    gcc -nostartfiles -e 入口 filename.c
    

    -nostartfiles : 关掉gcc默认的main函数作为入口

    -e : 设置程序开始的入口

    // 简单的尝试
    #include <stdio.h>
    #include <stdlib.h>
    void print()
    {
        printf("print\n");
        exit(0);
    }
    

    如果在程序的结尾处没有加上exit函数, 调用return也会出错, 报出断错误. 这里主要是exit函数会直接告诉系统该程序退出, 而return只是将程序返回, 我们并没有将程序地址压栈, 所以return返回的地址就会产生越界, 连个如果都没有, 那么程序也就不知道它自己执行结束.

    在这里插入图片描述

    同样我们objdump看一下, 此时程序的入库设置成了print函数, 结束的时候在调用exit, 杀死该进程.

    在这里插入图片描述

    没有调用exit的函数, 则显示的便是这样.

    对exit和return不太区分的, 也可以看看这一篇博客.exit和return的区别

    如果是自己写的OS程序启动, 可在boot.s中修改入口, call 入口函数名就行了

    展开全文
  • Windows程序入口

    千次阅读 2021-03-20 20:38:19
    程序入口 标准的Windows程序入口 #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { return 0; } 涉及知识点 匈牙利命名法...

    程序入口

    标准的Windows程序入口

    #include<windows.h>
    
    int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    PSTR szCmdLine, 
    int	iCmdShow)
    {
    	return 0;
    }
    
    

    涉及知识点

    • 匈牙利命名法(Hungarian Notation)
      前缀+名称
      sz表示以零结尾的字符串(String Terminated With a Zero)
      i表示int

    • WINAPI标识符是一个宏定义,表示使用标准调用约定
      #define WINAPI __stdcall

    • 第一个参数 HINSTANCE hInstance
      实例句柄(Instance Handle), 类比指针作用

    • 第二个参数 HINSTANCE hPrevInstance
      多个实例运行时,通过此参数可以找到其他实例。
      一般设为NULL(定义为0)

    • 第三个参数 PSTR szCmdLine
      运行程序的命令行(Command Line)

    • 第四个参数
      指明程序最初如何显示:正常或最大或到全屏等。

    注:详细参考也可移步MSDN。

    展开全文
  • python程序入口

    千次阅读 2019-07-11 19:17:15
    python程序入口概念 像java,c++这些语言,都会有main函数来标记整个程序的入口。python作为脚本语言,是动态执行每一行程序的,也就是从脚本的第一行开始执行,并没有统一的入口。 一个python源码文件(.py),可以...

    python程序入口概念
    像java,c++这些语言,都会有main函数来标记整个程序的入口。python作为脚本语言,是动态执行每一行程序的,也就是从脚本的第一行开始执行,并没有统一的入口。
    一个python源码文件(.py),可以直接运行,也可以作为模块(库)导入。当.py直接被运行时,if __name == 'main’之下的代码块将被执行;而作为模块导入时,if name == 'main’之下的代码块将不被执行。
    例如
    const.py

    PI = 3.14

    def show_PI():
    print(“PI:”, PI)
    show_PI()

    CircleArea.py

    import const

    def circle_area(radius):
    circle_area = const.PI * radius * radius
    return circle_area
    print(“Area:”, circle_area(2))

    这个时候运行CircleArea.py,结果就是
    PI:3.14
    Area:12.56
    其中PI是const.py中的方法,导入时并不想运行这个方法,可以修改const.py成为

    if name == ‘main’:
    shwo_PI()
    这样就不会再运行const中的方法了

    展开全文
  • 成功解决python.exe 无法找到程序入口 无法定位程序输入点 导读:此文为博主编写代码过程笔记。 目录 解决问题 解决方法 解决问题 解决方法 博主在pip install的时候遇到的,继续点击...

    成功解决python.exe 无法找到程序入口 无法定位程序输入点

     

    导读:此文为博主编写代码过程笔记。

     

     

     

     

    目录

    解决问题

    解决方法

    参考网友推荐答案

    第一位网友的建议

    第二位网友的建议


     

     

     

     

    相关文章成功解决 安装pywin32时出现python version 3.6-32 required, which was not found in the registry

    解决问题

     

     

     

     

    解决方法

    博主在pip install的时候遇到的,继续点击运行,不妨碍。应该是dll文件出了问题。
    欢迎更好的解释以及对策。如各路网友有更好的解决办法,请群策群力,留言共同探讨与解决!

    PS:博主将选择网友留言中,点赞最多的答案写入文章。

     

    参考网友推荐答案

    第一位网友的建议

    应该是numpy的问题,pip uninstall numpy,pip install numpy

     

     

    第二位网友的建议

    网友留言点赞最多的方法,博主也推荐

    我给个我的解决方案吧。
    pythoncom37.dll是pywin32的一个文件,位于路径Anaconda3\envs\pytorch(你的虚拟环境)\Lib\site-packages\pywin32_system32中,
    而Anaconda3\envs\pytorch\Library\bin中也存在一个同名文件,
    我将后者文件删除后便没有这个警报了

     

     

     

     

     

     

     

    展开全文
  • 程序入口

    2015-06-03 07:00:38
    关于不同的程序入口,main(), _tmain(),WinMain(),wmain()? (2012-07-01 23:15:16)转载▼ 标签: 杂谈 分类: C编程 http://topic.csdn.net/t/20010930/15/308713.html 答:main()是WINDOWS的控制台程序(32...
  • 6.程序入口和注释

    千次阅读 2018-08-02 15:13:14
    程序入口和注释 在前面的课程中讲到了计算机程序运行的模型、数据存储模型、程序的编译和运行。大家对计算机程序的编写到最终运行的过程有一个简单的了解。从本章节开始,将会逐步的讲到计算机中程序代码的编写规则...
  • MFC 程序入口和执行流程

    千次阅读 2017-12-25 15:45:25
    MFC 程序入口和执行流程 一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序...
  • Swift程序入口深度分析

    千次阅读 2014-11-27 10:38:35
    Swift入口函数深度分析,主要包括Swift如何程序程序入口,Swift入口原理等内容
  • DLL程序入口DllMain详解

    万次阅读 2017-09-12 14:46:44
    DLL程序入口点函数:DllMain,注意:大小写是区别的(仅导出资源的DLL可以没有DllMain函数)。 函数原型: [cpp] view plain copy  print? BOOL APIENTRY DllMain( HMODULE hModule...
  • 微擎框架小程序 入口

    2018-01-18 15:01:00
    微擎框架小程序 入口 App({ onLaunch: function () {}, onShow: function () {}, onHide: function () {}, onError: function (msg) {}, //加载微擎工具类 util: require('we7/resource/...
  • go语言研究-程序入口

    2019-10-27 10:14:16
    最近今日发头条及各大门户竞相报道“区块链”了,作为个人,也得开始进入“区块链”相关的... 程序入口代码 */ func main() { fmt.Printf("Hello World"); } 必须是main包: package main 必须是main方法:func ...
  • MFC程序入口和执行流程

    千次阅读 2016-04-15 17:01:14
    一 MFC程序执行过程剖析 1)我们知道在WIN32API...而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派生类的声明和定义以及一个冲CWinApp类派生而来的类的全局对象。CWinApp类被称之
  • Spring Boot项目的真实程序入口

    千次阅读 2017-11-23 11:48:11
    基于 spring-boot-start开发的项目,其程序入口并不是我们开发的业务代码中定义了 main 函数的类,而是 Spring Boot 定义的 JarLauncher 类(下文源码反编译自 spring-boot-loader-1.5.8.RELEASE.jar)。 通常使用 ...
  • Flume 1.7 源码分析(三)程序入口

    千次阅读 2017-02-27 13:20:03
    Flume 1.7 源码分析(三)程序入口 4 程序入口启动Flume的过程可以简单分为2个步骤: 1. 获取相关配置文件(一般来说就是flume-conf.properties)。 2. 启动各组件。不特别说明,本文中的组件是指实现了...
  • 一 MFC程序执行过程剖析 ...而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派生类的声明和定义以及一个冲CWinApp类派生而来的类的全局对象。CWinApp类被称之为应用程
  • DllMain——DLL程序入口点函数

    千次阅读 2018-11-12 15:15:38
    DLL程序入口点函数:DllMain。注意:大小写是区别的 仅导出资源的DLL可以没有DllMain函数。 函数原型: // dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" ...
  • Python-程序入口

    千次阅读 2019-01-19 09:19:17
    对于if __name__ == ‘__main__’:的理解 对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的...C,C++都需要有一个main函数作为程序入口,也就是程序的运行会从main函数开始。同...
  • C++程序入口

    千次阅读 2017-11-01 19:45:40
    今天终于有时间来研究一下一个很大很大的工程编译成一个exe和若干dll后,程序是如果执行它的第一条指令的?操作系统以什么规则来找到应该执行的第一条指令(或说如何找到第一个入口函数的)?  我们以前写...
  • 不用main函数也可以进入程序入口

    千次阅读 2018-11-23 09:16:50
    一般情况,执行程序的时候,都会有 ...如果不想用main程序入口怎么办? @Test就可以解决 举例子说明 package cn.com.test; import java.util.List; import org.hibernate.Query; import org...
  • 程序如何执行和程序入口

    千次阅读 2016-03-22 16:17:38
    [摘要] 我们的程序进入到入口函数之前,是发生了很多事情的。操作系统的安排,启动运行时库,运行时库再初始化好环境,然后启动你的入口函数,你的程序才正常的运行起来。等你的程序运行结束后,就退回到运行时库,...
  • 操作系统装载应用程序后,做完初始化工作就转到程序入口点执行。程序的默认入口点由连接程序设置, 不同的连接器选择的入口函数也不尽相同。在VC++下,连接器对控制台程序设置的入口函数是 mainCRTStartup,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,708
精华内容 17,883
关键字:

程序入口